kYp escribió:Gusvo me referia que si uso la graphics no puedo usar la pspdebug para imprimir texto
Es que es el problema de usar las funciones de pspDebugScreen***. Seguro que hay gente por EOL que te lo podría explicar mil veces mejor e incluso corregirme si me equivoco, pero creo que el problema viene de que, cuando se inicializa la pantalla mediante pspDebugScreenInit, la propia librería toma un valor por defecto de comienzo de la memoria de video, así como de tamaño de buffers, y como graphics.h también hace su inicialización por defecto, si toman distintos valores, saldran cosas raras por pantalla, de ahí que la propia graphics.h dea susu propias funciones para imprimir por pantalla. Yo no uso graphics.h demasiado, suelo hacer librerías propias, aunque basicamente son parecidas a esta, y en todas he tenido que usar mis propias funciones para imprimir texto.
kYp escribió:puedes explicar flipScreen(); ¿? esque me esta dando problemas de que me aparecezca el texto al pulsar alguna opcion del menu que hice ya que alomejor selecciono la Opcion1 y no sale el texto q tendria que salir y en el menu se me selecciona la de antes y me sala el texto que tendria que salir cada dos pulsaciones en la cruzeta para moverme por el menu . Ya que para que aparezca el texto necesito poner flipScreen(); no ¿?
Pues sí, tienes que ponerlo si quieres doble buffer, casi seguro ese es el fallo. Basicamente, flipScreen intercambia dos buffers, el de pintado y el que se muestra. Cuando quieres pintar algo en pantalla, se hace en el buffer de pintado. Para mostrarlo, se intercambia el de pintado con el que se muestra, y así sucesivamente. Aún así, si te hace eso, más que por no usarlo, parece más bien que lo usas en un mal lugar del codigo, es algo así como que intercambias el buffer 2 veces seguidas, aunque sin ver el codigo es dificil saberlo.
kYp escribió:y no doy borrado la pantalla por que no doy usado: clearScreen(Color color); no se en que se pone el valor ya que en u32 no tira
Pues debería tirar, pues como pone en graphics.h Color es una redefinición del tipo u32.
Aún así, hay una cosa, y es que no se si yo tengo un graphics.c defectuoso y el resto lo tiene bien o es que el código tiene este bug en todos los lados, porque si miras la función clearScreen en graphics.c es:
SeleccionarCopiarvoid clearScreen(Color color)
{
if (!initialized) return;
guStart();
sceGuClearDepth(0);
sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT);
sceGuFinish();
sceGuSync(0, 0);
}
Como se ve, nunca usa el color que se le pasa. Si el código de graphics.c es así, debes corregirlo para poder borrar con el color que le pasas. La función quedaría así:
SeleccionarCopiarvoid clearScreen(Color color)
{
if (!initialized) return;
guStart();
// Indicamos el color con el que queremos borrar:
sceGuClearColor(color);
sceGuClearDepth(0);
sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT);
sceGuFinish();
sceGuSync(0, 0);
}
Así, si por ejemplo, en el código que puse antes, quieres borrar el fondo antes de pintar algo, el bucle quedaría:
SeleccionarCopiarwhile(!fin){
// Borrado del fondo en color blanco:
clearScreen(0xffffffff);
// Se pinta la imagen de fondo cargada antes.
blitImageToScreen(0, 0, 480, 272, fondo, 0, 0);
printTextScreen(30, 30, "Este texto aparece sobre el fondo", (u32)0xff000000);
// Se intercambian los bufferes.
flipScreen();
// Se espera al retrazo vertical.
sceDisplayWaitVblankStart();
}
Saludos y siento el rollazo que he soltado