Anuncios Google

[SOLUCIONADO] Ayuda con programa en C

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


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de maupsp

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

 

Imagen de arielnmz

wow

funciono de maravilla mil gracias

Imagen de pspgorrister

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.

Imagen de arielnmz

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

Imagen de maupsp

De nada!

Es un gusto ayudar, si tienes alguna duda no dudes en preguntar! No te rindas!

Imagen de pspgorrister

sceCtrlReadBufferPositive no

sceCtrlReadBufferPositive no detiene la ejecución del bucle. va tan rápido el borrar y mostrar que por eso te parpadea.

Un saludo.
Imagen de arielnmz

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

Imagen de pspgorrister

eeeh? yo no mencione

eeeh?

yo no mencione nada acerca de los controles...

LOL

Imagen de moikop

Has tratado cambiando el

Has tratado cambiando el sceDisplayWaitVblankStart(); de lugar y ponerlo abajo del count++;?

Un saludo.

Imagen de arielnmz

se ve

parpadeando...

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.