Hola:
Estoy intentando hacer funcionar un pequeño ejemplo que
pinta una serie de sprites en pantalla, luego al presionar uno de ellos
nos lleva a una pantalla de espera en la que hasta que no pulsemos
start, no se sigue adelante. Todo funciona correctamente, excepto el
paso en el que se debe apretar el "start" que ni la máquina física, ni
el DESMUME hacen nada, como si no se hubiese pulsado nada, es curioso
ya que sólo me pasa con las teclas, porque el touchpad funciona muy
bien. ¿Algún consejo?, os pongo aquí el trozo de código.
#include <PA9.h>
// PAGfxConverter Include
#include "gfx/all_gfx.h"
#include "gfx/all_gfx.c"
int main(void){
bool start = false;
bool tocado = false;
int valor;
PA_Init(); //PAlib inits
PA_InitVBL();
PA_InitText(0,1);
PA_OutputSimpleText(0,0,1,"Elige un tipo de juego...");
PA_LoadSpritePal(0, // Pantalla
0, // Numero de paleta
(void*)singleplayer_Pal); // Nombre de paleta
PA_CreateSprite(0, // Pantalla
0, // Numero de sprite
(void*)singleplayer_Sprite, // Nombre de sprite
OBJ_SIZE_32X32, // Tamaño de sprite
1, // Modo de 256 colores
0, // Numero de paleta
80, 70); // Posicion X e Y en la pantalla
PA_LoadSpritePal(0, // Pantalla
1, // Numero de paleta
(void*)multiplayer_Pal); // Nombre de paleta
PA_CreateSprite(0, // Pantalla
1, // Numero de sprite
(void*)multiplayer_Sprite, // Nombre de sprite
OBJ_SIZE_32X32, // Tamaño de sprite
1, // Modo de 256 colores
1, // Numero de paleta
130, 70); // Posicion X e Y en la pantalla
while(1) // Infinite loops
{
PA_WaitForVBL();
while (! tocado){
if (PA_SpriteTouched(0)==true){
PA_InitText(0,1);
PA_OutputSimpleText(0,0,1,"individual");
valor = 0;
tocado = true;
}else if (PA_SpriteTouched(1)==true){
PA_InitText(0,1);
PA_OutputSimpleText(0,0,1,"colectivo");
valor = 1;
tocado =true;
}/*else if (PA_SpriteTouched(2)==true){
PA_InitText(0,1);
PA_OutputSimpleText(0,0,1,"euskera");
valor = 2;
tocado = true;
}*/
}
PA_ClearBg(0,1);
PA_ResetSpriteSysScreen(0);
PA_InitText(1, 2);
PA_OutputSimpleText(1, 1, 2, "Bienvenido a TrivI/O! pulsa START para continuar...");
while (!start)
{
if (Pad.Newpress.Start)
{
start = true;
PA_ClearBg(1,1);
}
}
}
return 0;
}
}
Gracias, un saludo a todos.
Acuérdate poner siempre en
Acuérdate poner siempre en todo while PA_WaitForVBL();
Salu2TS!
He probado a poner la funcion
He probado a poner la funcion PA_WaitForVBL(), así que el código queda así:
...
while (!start)
{
PA_WaitForVBL();
if (Pad.Newpress.Start)
{
start = true;
PA_ClearBg(1,1);
}
}
En el emulador IDeas me funciona, pero en el DESMUME y en la máquina física no. ¿Por qué puede pasar ésto?
Gracias, un saludo.
Aver que nos aclaremos.
El PA_WaitForVBL es el contador y tiene que ir al final del while.
Bueno he probado de las dos
Bueno he probado de las dos maneras, poniendo el wait arriba, abajo...incluso en ambos sitios y nada. Sólo me funciona en el Ideas...ahora es cuando me empiezo a desesperar oficialmente por miedo a que sea a alguna configuración de librerias...no sé, es un suponer.
He estado revisando el código y tienes mal las condiciones.
Creo que tienes mal las condiciones, pero puede ser fallo mío.
Yo lo haría así:
Ese código sería así pero no tiene mucho sentido...
El código que planteas
El código que planteas también es correcto, lo único en los if's que comprueba si se ha pulsado el sprite la condición debería ser:
if (PA_SpriteTouched(0) && start==false){ //Inicio if 0
(El start a false porque si no, no entraría en la condición por mucho que pulsasemos, ya que start esta inicializado como false).
A parte de ésto, he vuelto a probar recompilando de nuevo el código de la manera que tu propones pero sigue pasando lo mismo, funciona perfectamente en Ideas pero ya en Desmume y en la máquina física nada de nada.
Pues ya estoy perdido.
No se que podría ser. Es que que funcione en uno y no en otro es cosa rarra...
Cuando tenga un rato intentaré compilarlo en mi PC con unos sprites del mismo tamaño.
Salu2TS!
Ok, la verdad que sigo
Ok, la verdad que sigo dándole vueltas y no hay manera. De cualquier manera, gracias por la atención.
Un saludo.