Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: jronis en Febrero 18, 2014, 11:00:31 PM

Título: Problemas al navegar por el menu con el Joystick
Publicado por: jronis en Febrero 18, 2014, 11:00:31 PM
Hola a todos, recientemente he tenido un problema al navegar por el menu con el Joystick.

Me explico, he creado un menu para un juego con 4 opciones.

NEW GAME
HIGHSCORE
CREDITS
EXIT

Al cargar el menu la primera opción "NEW GAME" aparece resaltada en rojo las otras en blanco.

Le asigné las teclas de dirección con el evento key press "up" y "down" para desplazarme por las diferentes opciones y sin problema. Pero cuando dupliqué el evento para poder elegir desde el Joystick me surge el siguiente problema.

Cuando pulso abajo con el Joystick me salta 3 o 4 opciones y hacia arriba exactamente lo mismo. Es como si lo tuviera en el teclado en el evento keyboard y no en el keypress pero con el Joystick.

Lo que pretendo explicar es que al igual que sucede con el teclado, que por mucho tiempo que mantengas pulsada la tecla el evento no se repite, en cambio con el Joystick si se repite.

No se si a alguien le ha pasado lo mismo antes.


Gracias de antemano

Saludos

José R. Onís

Título: Re:Problemas al navegar por el menu con el Joystick
Publicado por: penumbra en Febrero 18, 2014, 11:52:32 PM
Esto no es propiamente un problema. Es así como funcionan los joysticks, que no son lo mismo que un teclado

Cita de: jronis en Febrero 18, 2014, 11:00:31 PM
Lo que pretendo explicar es que al igual que sucede con el teclado, que por mucho tiempo que mantengas pulsada la tecla el evento no se repite, en cambio con el Joystick si se repite.

Imagina que en cualquier juego, para que el personaje avanzara, tuvieras que estar presionando una y otra vez la cruz de direcciones o la palanquita sin parar, sería horrible. Lo normal es que el evento sea continuo, y que mientras haya presión o no se suelte la palanca, haya una dirección activa en el gamepad

Coloquialmente, lo que estás haciendo es

"Revisa si hay 'dirección' en el joystick, si la hay, avanza en el menú" ~ Así que mientras no sueltes el joystick, se sigue avanzando en el menú.

Lo que hace falta es

"Si ya se avanzó una vez en el menú, no volver a avanzar en la misma dirección hasta que el gamepad pase por la dirección neutral (es decir, se suelte la palanca)"

Hacer que sólo se avance una vez, o hacer que se avance cada cierta cantidad de STEPS, se puede lograr de distintas maneras.


Título: Re:Problemas al navegar por el menu con el Joystick
Publicado por: jronis en Febrero 19, 2014, 12:22:20 AM
Claro, y yo buscando una función parecida a keypress pero para el Joystick.

Muchas gracias penumbra.

Saludos



Título: Re:Problemas al navegar por el menu con el Joystick
Publicado por: vampy09 en Febrero 19, 2014, 05:08:43 AM
A mi me sucedido y una forma que encontrado es haciendo un objeto que convierta las pulsaciones del joystick en eventos key_press y key_released, atravez de dos scripts.
El primero simplemente inicializa las variables de los botones del joystick que deseamos simular.

scr_joystick_ini

joy_up = false;
joy_right = false;
joy_down = false;
joy_left = false;
joy_button_1 = false;

Ahora el script que realiza el chequeo de los botones de joystick
scr_joystick_step

switch (joystick_direction(1))
{
case 101:
     if (joy_right = true)
        {
         joy_right = false;                 keyboard_key_release(vk_right);
        }
     if (joy_left = true)
         {
          joy_left = false;    keyboard_key_release(vk_left);
          }
     if (joy_up = true)
         {
          joy_up = false; keyboard_key_release(vk_up);
          }
     if (joy_down = true)
         {
          joy_down = false; keyboard_key_release(vk_down);
         }
break;
  case 102:
      joy_right = true;   keyboard_key_press(vk_right);
      break;
  case 100:
      joy_left = true; keyboard_key_press(vk_left);
      break;
  case 104:
      joy_up = true;
      keyboard_key_press(vk_up);
      break;
   case 98:
       joy_down = true;        keyboard_key_press(vk_down);
       break;
}

if (joystick_check_button(1,1))
   {
    if (joy_button_1=0)
   {
    joy_button_1=1
    }
     keyboard_key_press(vk_enter)
    }
else
{
  if (joy_button_1=1)
     {
      joy_button_1=0;    keyboard_key_release(vk_enter);
     }
}

Ahora creamos un objeto control
obj_joystick_control
Evento create
scr_joystick_ini();

Evento step
scr_joystick_step();

Hacemos el objeto permanente.
La ventaja es que no debemos agregar ningun codigo adicional ningun otro objeto que lidie con las pulsaciones del joystick.
Te recomiendo que busques informacion de la funcion joystick_direction.