bueno.. hoy empece mis clases de prog en C y ya me tope con un problema..
el conflicto en si se da en esta pieza:
for(i=0; i<200; i++) { sceDisplayWaitVblankStart(); pspDebugScreenClear (); printf("Pulsa (O) para parar el contador\n"); printf("Contador: %i", counter); counter++; sceCtrlReadBufferPositive(&pad, 1); if(pad.Buttons & PSP_CTRL_CIRCLE) { break; } }
y es que cuando inicia mi programa, no muestra nada en la pantalla, hasta que termina el ciclo o pesiono circulo..
pero cuando quito sceDisplayWaitVblankStart();
se alcanza a ver algo del texto pero parpadea, como queriendose mostrar y a la vez no..
como puedo solucionarlo??
[SOLUCIONADO]
Consegui retrasar el programa mas mmm eficientemente con esto:
for(i=0; i>5; i++) { sceDisplayWaitVblankStart(); }
Gracias a todos por su ayuda
Has intentado...
Hola compañero!!!
Tu ejemplo de código funciona adecuadamente es verdad, quizás el problema no sea tanto la programación, si no tus ídeas que deseas proyectar en el lenguaje C.
Primero que nada aqui te van algunas explicaciones sobre lo que pasa en tu programa inicial, si ya lo tenías encuenta entonces has caso omiso del mismo.
1.sceDisplayWaitVblankStart(); hace que la pantalla permanesca estática, no necesariamente en negro, pero en ese estado se encontraba anteriormente.
2.pspDebugScreenClear (); limpia la pantalla en cada iteración(cada vez que se ejecuta el codigo) entonces limpia la pantalla muy rápidamente x cada segundo (dependiendo de tiempo que le tome a la instrucción FOR realizar un iteración), es por eso que notas el parpadeo en tu pantalla, limpiar la pantalla cada tiempo corto pareciera dar el efecto de parpadeo.
Ahora, si observas tu programa, este se detendrá automaticamente cuando el contador alcanze los 200 iteraciones, pero si lo que quieres observar es el conteo de cada iteración y presionar 0 para salir en cualquier momento, entonces te recomiendo que utilices la función sceKernelDelayThread(1*1000*1000) que retrasa cierto tiempo (indicado entre parentesis) todo el programa (hilo /thread) pero ojo, retrasa todo el programa todas sus funciones las detiene por cierto tiempo, asi que si presionas 0 en ese tiempo de retraso, este no surtira efecto en el programa.
De esa forma se podría solucionar tu problema, teniendo algo como:
for(i=0; i<200; i++)
{
pspDebugScreenClear ();
pspDebugScreenPrintf(" PULSA 0 PARA DETENER");
pspDebugScreenPrintf("Contador: %i", counter);
sceKernelDelayThread(.5*1000*1000);///detiene el programa por medio segundo aproximadamente
counter++;
sceCtrlReadBufferPositive(&pad, 1);
if(pad.Buttons & PSP_CTRL_CIRCLE)
{
break;
}
}
Hay muchas formas de realizar este ejemplo mediante DO y While pero ya que estás empezando la programación sólo te dejo con el FOR, espero te ayude en algo.
Aqui estoy para ayudarte, si tienes algun problema más, comentanos si te funcionó, o si tienes algún otro problema
Saludos desde México
Pd. Como tip, manten siempre organizados tus llaves dandoles diferentes medidas de tabulaciones para hacer el código más legible y comenta todo lo que puedas
Maurizio Meza
Crea tu insignia
wow
funciono de maravilla mil gracias
Buena explicación
Yo le dije que no tiene ninguna pausa y por eso le parpadea, pero tú se lo has explicado muy bien.
Sólo decirte que tú definición de sceDisplayWaitVblankStart
sceDisplayWaitVblankStart(); hace que la pantalla permanesca estática,
no necesariamente en negro, pero en ese estado se encontraba
anteriormente.
es errónea o en todo caso muy confusa. Esa instrucción, espera a sincronizar con cada ciclo de la pantalla, evitando los indeseados efectos de sierra, es decir, impide poner más de un frame por ciclo, que en el caso de la PSP creo que es 60Hz, o lo que es lo mismo 60FPS.
Mejor explicado aquí (en inglés)
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
aahora entiendoo..
aahora entiendoo.. exactamente eso estaba buscando, como hacer una pequeñisima pausa en la ejecucion del thread, pensaba que cierto orden en el codigo era el que causaba que funcionara mal (no como quiero) gracias a los dos
arieldev.blogspot.mx
De nada!
Es un gusto ayudar, si tienes alguna duda no dudes en preguntar! No te rindas!
sceCtrlReadBufferPositive no
Un saludo.
eeeh?
yo no mencione nada acerca de los controles... solo que con SCEWaitVBlankStart presente hace que no se vea nada en pantalla (pero sigue ejecutandose).. y sin él, si se alcanzan a ver.. pero parpadeando.. lo que quiero saber es como hacer para que no se vean parpadeando, pero tampoco que desaparezcan???.. ojala me haya dado a entender
arieldev.blogspot.mx
eeeh? yo no mencione
eeeh?
yo no mencione nada acerca de los controles...
LOL
Has tratado cambiando el
Has tratado cambiando el sceDisplayWaitVblankStart(); de lugar y ponerlo abajo del count++;?
Un saludo.
se ve
parpadeando...