PDA

Ver la versión completa : ¿Repeticion de movimientos con el joystick?



Eskema
05/05/2006, 19:06
Muy buenas, estoy tratando de portar mis juegos y la cosa esta chunga, ¿como hago para que el mando me detecte que lo mantengo pulsado ?(ir hacia adelante)

Tengo el codigo tal que asi, pero solo detecta cada pulsacion individual y el enablekeyrepeat no sirve para el joystick



while( SDL_PollEvent( &evento ) )
{
if(evento.type==SDL_QUIT)
{
terminar=1;
}
if (evento.type == SDL_JOYBUTTONDOWN) {
if (evento.jbutton.button == GP2X_BUTTON_SELECT)
{
terminar=1;
Mix_HaltMusic();
}

if (evento.jbutton.button == GP2X_BUTTON_RIGHT)
{
MovimientoDerecha();
}


if (evento.jbutton.button == GP2X_BUTTON_LEFT)
{
MovimientoIzquierda();
}


if (evento.jbutton.button == GP2X_BUTTON_UP)
{
MovimientoArriba();
}


if (evento.jbutton.button == GP2X_BUTTON_DOWN)
{
MovimientoAbajo();
}


¿Que hago mal? o ¿que me falta poner?

Puck2099
05/05/2006, 19:52
No haces nada mal, pero como tú dices, al usar los JOYBUTTONDOWN solo te va a detectar un evento cada vez que pase un botón de estado no pulsado a pulsado.

Prueba con algo así:



.....
if (SDL_JoyGetButton(Joystick, GP2X_BUTTON_RIGHT)) MovimientoDerecha();
if (SDL_JoyGetButton(Joystick, GP2X_BUTTON_LEFT)) MovimientoIzquierda();
....

Uncanny
05/05/2006, 19:57
Ahora mismo, sin probarlo, se me ocurre algo así (algo chapuzero, si xD):


[...]
if (evento.jbutton.button == GP2X_BUTTON_RIGHT)
{
do
{
MovimientoDerecha();
}
while (evento.jbutton.state == SDL_PRESSED);
}


En realidad esto habría que controlarlo mejor (yo acostumbro a tirar más de switch que de if encadenados), pero la idea que se me ha ocurrido es que podrías controlar el valor del miembro state (SDL_PRESSED cuando el botón está presionado y SDL_RELEASED cuando se ha dejado de pulsar) de la estructura SDL_JoyButtonEvent (por jbutton, de la unió SDL_Event) y repetir en un bucle la acción de la función mientras que el estado del botón sea que esté pulsado.

P.D: Acabo de ver la solución de Puck, posiblemente más sencilla si está encerrada en un bucle while controlando el evento type con valor SDL_JOYBUTTONDOWN o algo similar.

Eskema
05/05/2006, 20:04
Voy a probar las 2 soluciones a ver cuala me apaña mas de las dos. ¿A que velocidad va la consola con el firm 2.0 por defecto?

Puck2099
05/05/2006, 20:10
P.D: Acabo de ver la solución de Puck, posiblemente más sencilla si está encerrada en un bucle while controlando el evento type con valor SDL_JOYBUTTONDOWN o algo similar.

No, la gracia está en que vaya sin eventos SDL_JOYBUTTONDOWN ni nada así, meter eso tal cual en el bucle principal (controlando con una variable que se decremente o algo así para que se ejecute cada cierto tiempo) y ya está :)

Si necesitáis más os pego algún código del LK o algo :)

Saludos

Uncanny
05/05/2006, 20:11
¿A que velocidad va la consola con el firm 2.0 por defecto?Si no ha cambiado creo que a 200 MHz cuando se sale del menú.

Eskema
05/05/2006, 20:15
Si necesitáis más os pego algún código del LK o algo :)

Saludos


Peganos, maltratanos, estooooo digo pon codigo pq con esto del joystick no me aclaro, claro q por otro lado no lo he usado en mi vida