Iniciar sesión

Ver la versión completa : [Ayuda] Controles en Caanoo



hi-ban
16/08/2011, 16:12
Ultimamente ando contribuyendo (con lo poco que sé) en el emulador OhBoy http://code.google.com/p/ohboy/

Tengo Dingoo Y Caanoo, asi que puedo hacer pruebas para las dos consolas.
Mi problema es que, mientras los controles del menu en dingoo funcionan a la perfeccion, en Caanoo no es asi.

Cualquiera que haya probado el OhBoy para caanoo lo habrá experimentado.
Navegando por los menus, el stick analógico responde bien, pero la mitad de las veces, despues de haberlo soltado, sigue moviendose en la misma dirección durante unos momentos.

Eso da lugar a, muchas veces, que involuntariamente se seleccione otra opción diferente a la deseada.

Sin embargo, en todos los demás emuladores para caanoo, no ocurre esto, lo que me lleva a pensar que el problema está en el código.


Agradecería ayuda en esto.

O si no, tambien me vendria bien echar un vistazo al codigo fuente del menu del drpocketsnes, que ese anda muy bien...

Saludos!

Jurk
16/08/2011, 17:39
http://www.gp32x.com/board/index.php?/topic/56370-caanoo-controls-info/

hi-ban
16/08/2011, 18:31
Ese hilo ya lo leí, Ohboy lleva este mismo código: http://www.gp32x.com/board/index.php?/topic/56370-caanoo-controls-info/page__view__findpost__p__913158

La cosa es... por qué? ese efecto raro en los controles? y ademas solo ocurre en el menu; mientras estás jugando, los controles parecen ir bien...

Una cosa que me he fijado es que los controles sólamente hacen "extraños" si, mientras pulsas una direccion (p. ej. abajo), tocas levemente la diagonal.
Si tienes el stick bien centrado en la dirección que sea, los "extraños" no ocurren...

¿Alguna posible explicacion?

En el código del menu de OhBoy, las diagonales no están definidas.

hardyx
16/08/2011, 20:43
Lo que puede estar pasando es que el valor que tenga de "zona muerta" sea demasiado pequeño (normalmente es la mitad del ángulo) y sea más sensible a los movimientos. O también puede ser que no ignore los valores una vez que coge un movimiento, lo que se llama vaciar el buffer o "comerse las teclas".

hi-ban
16/08/2011, 21:15
los valores de la zona muerta van de 0 hasta 32768. Incluso cambiandolos a 32700 sigue ocurriendo, asi que de la zona muerta no es...

a lo mejor es lo segundo que dices, pero solo ocurre cuando se va un poco el stick hacia la diagonal...

y cuanta mas diagonal le des, mas rato se tira moviendose...

cómo evito que se "coma las teclas"?

hardyx
16/08/2011, 22:35
He estado mirando el código. El problema es que cuando haces una diagonal la función Caanoo_PushAnalogEvent() manda dos códigos: una dirección horizontal y otra vertical. Habría que cambiar la función Caanoo_UpdateAnalog() en main.c para que únicamente mande un evento en estos casos. Lo que pasa es que eso afectaría a la emulación, no se si en GB se usan dos direcciones a la vez (ej: up+left). Si es así, es mejor no cambiarlo.

Así sería para coger sólo un botón cada vez:


void Caanoo_UpdateAnalog(void)
{
static int buttonsPrev = 0;
int buttonsNow = 0;

SDL_JoystickUpdate();

if (SDL_JoystickGetAxis( sdl_joy, 0 ) < -16384) buttonsNow = (1 << BTN_LEFT);
else if (SDL_JoystickGetAxis( sdl_joy, 0 ) > 16384) buttonsNow = (1 << BTN_RIGHT);
else if (SDL_JoystickGetAxis( sdl_joy, 1 ) < -16384) buttonsNow = (1 << BTN_UP);
else if (SDL_JoystickGetAxis( sdl_joy, 1 ) > 16384) buttonsNow = (1 << BTN_DOWN);

if (buttonsNow != buttonsPrev)
{
if ((buttonsNow & (1 << BTN_LEFT)) != (buttonsPrev & (1 << BTN_LEFT)))
{
Caanoo_PushAnalogEvent(BTN_LEFT, (buttonsNow & (1 << BTN_LEFT)));
}
if ((buttonsNow & (1 << BTN_RIGHT)) != (buttonsPrev & (1 << BTN_RIGHT)))
{
Caanoo_PushAnalogEvent(BTN_RIGHT, (buttonsNow & (1 << BTN_RIGHT)));
}
if ((buttonsNow & (1 << BTN_UP)) != (buttonsPrev & (1 << BTN_UP)))
{
Caanoo_PushAnalogEvent(BTN_UP, (buttonsNow & (1 << BTN_UP)));
}
if ((buttonsNow & (1 << BTN_DOWN)) != (buttonsPrev & (1 << BTN_DOWN)))
{
Caanoo_PushAnalogEvent(BTN_DOWN, (buttonsNow & (1 << BTN_DOWN)));
}
}
buttonsPrev = buttonsNow;
}

hi-ban
16/08/2011, 22:54
dime que ponerle y lo pruebo. si lo que me sobra es tiempo, jejeje. :brindis:

< - >
acabo de probarlo, y así cuando pulsas una dirección se queda pulsada indefinidamente...

hardyx
16/08/2011, 22:59
Por cierto, el otro día estuvimos en tu pueblo en la playa.

hi-ban
16/08/2011, 23:02
jajaja, hay unas cuantas por aqui cerca...

hardyx
16/08/2011, 23:10
He cambiado el código, pruebalo ahora.
Estuvimos en la playa de Ereaga.

hi-ban
16/08/2011, 23:33
la de Ereaga me cae casi al lado de casa, jeje. Lo malo que el agua no está muy limpia...

Acabo de estar probando el código y va mucho mejor, gracias. Aunque a veces tiene como un pequeño delay...
Como dato diré que en la emulación se pueden hacer las diagonales sin problemas. me da a mi que para la emulación utiliza otro input diferente...

hardyx
16/08/2011, 23:51
Me alegro de que vaya mejor, solo es trastear con las condiciones.