Hola buenas, hace unos meses pregunté como implementar una función de double tap para ejecutar una acción como pasar de caminar a correr. El asunto es que al ser un juego tipo rpg usa las cuatro direcciones, y por lo tanto al presionar una tecla una sola vez y luego otra rápidamente, cambia el estado a correr. Así es que mi pregunta es la siguiente:

¿Qué es mejor? ¿Usar cuatro variables iguales o un arreglo?

Hasta el momento usaba algo tipo:

[gml]
///Create
intCounterL = 0;
intCounterR = 0;
intCounterU = 0;
intCounterD = 0;
[/gml]

[gml]
///Step
if (keyboard_check_released(vk_left))
{
    intCounterL = 1;
    alarm[0] = 0.2;
}

if (intCounterL == 1 and keyboard_check(vk_left))
{
    intCounterL = 2;
}
[/gml]

[gml]
///Alarm 0
if (intCounterL == 2 and intMoveX < 0) bolCanRun = 1;
else
{
    bolCanRun = 0;
    intCounter = 0;
}
[/gml]

Hola FernandoNavarro

Mi sugerencia es que uses una tecla diferente para correr distinta a la de las 4 direcciones, en algunos juegos de play se corría con la "X" y te movías con el JoyStick.

Saludos

#2 Enero 15, 2020, 01:00:42 AM Ultima modificación: Enero 15, 2020, 05:21:52 AM por FernandoNavarro
BssString, también lo intenté, pero al ser un remake, quiero mantener la mecánica original.

Edit: Al final opté por usar las cuatro variables hermanas.

Hola FernandoNavarro

Perfecto xD
No sé en qué momento asignas la variable "bolCanRun" para poder correr, sólo veo el "intCounterL = 2" pero eso no activa la alarma para activar el bolCanRun, quizás está un poco incompleto el código. Además 0.2 Steps de tiempo es casi NADA a menos que hayas cambiado la room_speed a una más lenta. Te sugiero dar 2 o 3 Steps de gap por lo menos.

Lo otro, es que como son variables separadas, cuando sueltes la tecla derecha para cambiar a la izquierda, el personaje dejaría de correr.
Eso sería una molestia para el jugador a la larga.

Como sugerencia, cuando vas corriendo y sueltas la tecla derecha, creale un delay de un par de Steps para que el jugador tenga tiempo de soltar la tecla y luego pulse Izquierda, sigas corriendo sin apretar el Doble Tap de nuevo.
Puedes aprovechar incluso el mismo delay de la alarma en el keyboard_check.

if ( (intCounterL == 1 or bolCanRun = 1 ) and keyboard_check(vk_left))
{
    intCounterL = 2;
}

Esa nueva condición del "bolCanRun" hará que cuando pulses la tecla izquierda y ya estabas corriendo de antes en cualquiera de las 4 direcciones, sigas corriendo ahora hacia la izquierda.

Saludos

Lo del tiempo es porque tardaba mucho en pasar de un estado a otro, pero justo hace un momento mientras comía se me ocurrió incrementar el contador en la alarma y en el evento step activar y desactivar la booleana, así logro un efecto más instantáneo.