Bueno en realidad ya tengo el Dash, con el que tengo el problema es con el codigo de apretar 2 veces una direccion para poder hacer el Dash, lo que pasa es que siento que no es muy preciso es decir no siempre lo hace y no se de que forma mejorarlo el codigo es este:
Evento step
//Apretar 2 veces una direccion para hacer el dash
tiempo += 1;
if (tiempo >= 20)
{
if (!Left || !Right)
{
n_vecesL = 0;
n_vecesR = 0;
}
tiempo = 0;
}
if (!LeftPress) { canDash = false; }
if (!RightPress) { canDash = false; }
if (LeftPress)
{
n_vecesL += 1;
}
if (RightPress)
{
n_vecesR += 1;
}
if (n_vecesL == 2 || n_vecesR == 2)
{
canDash = true;
}
//Dash
if (!place_free(x, y + 1))
{
if (canDash)
{
if (dash == 0)
{
if (canMove == 1)
{
dash = 1;
if (dir = 1 && dash = 1) { hspd = -spd * 4.2 }
if (dir = 0 && dash = 1) { hspd = spd * 4.2 }
canMove = 0;
alarm[0] = 15;
}
}
}
}
Alarma 0
canMove = 1;
dash = 0;
canDash = false;
Les dejo el editable para que vean el codigo completo
Nota: el room esta en 60
Saludos
Hola ZELDA
Yo lo haría de la siguiente manera:
CREATE EVENT
DashLeft = false //revisa si debe ejecutar el dash hacia la izquierda
DashRight = false //revisa si debe ejecutar el dash hacia la derecha
ALARM 1 EVENT
DashLeft = false //revisa si debe ejecutar el dash hacia la izquierda
DashRight = false //revisa si debe ejecutar el dash hacia la derecha
STEP EVENT
if keyboard_check_pressed(vk_left) {
if DashLeft = false { //Revisa si no hemos apretado izquierda antes
DashRight = false //Cancela el intento de dashear a la derecha
DashLeft = true //Setea la variable para ver si debe hacer el dash
alarm[1] = 15 //Setea el timer para contar el dash
}
else { /*hacer el dash a la izquierda*/ } //Si ya habíamos izquierda antes y la volvemos a apretar dentro de los 15 steps, entonces efectua el dash
}
//El mismo código para la tecla derecha
if keyboard_check_pressed(vk_right) {
if DashRight = false {
DashLeft = false
DashRight = true
alarm[1] = 15
}
else { /*hacer el dash a la derecha*/ }
}
Por lo que veo de tu código, para decirle a donde hacer el dash basta con hacer:
canDash = true
dir = <1(izquierda) o 0(derecha)>
Tu código hará el resto
Saludos
Cita de: BssString en Agosto 15, 2018, 09:28:03 PM
Hola ZELDA
Yo lo haría de la siguiente manera:
CREATE EVENT
DashLeft = false //revisa si debe ejecutar el dash hacia la izquierda
DashRight = false //revisa si debe ejecutar el dash hacia la derecha
ALARM 1 EVENT
DashLeft = false //revisa si debe ejecutar el dash hacia la izquierda
DashRight = false //revisa si debe ejecutar el dash hacia la derecha
STEP EVENT
if keyboard_check_pressed(vk_left) {
if DashLeft = false { //Revisa si no hemos apretado izquierda antes
DashRight = false //Cancela el intento de dashear a la derecha
DashLeft = true //Setea la variable para ver si debe hacer el dash
alarm[1] = 15 //Setea el timer para contar el dash
}
else { /*hacer el dash a la izquierda*/ } //Si ya habíamos izquierda antes y la volvemos a apretar dentro de los 15 steps, entonces efectua el dash
}
//El mismo código para la tecla derecha
if keyboard_check_pressed(vk_right) {
if DashRight = false {
DashLeft = false
DashRight = true
alarm[1] = 15
}
else { /*hacer el dash a la derecha*/ }
}
Por lo que veo de tu código, para decirle a donde hacer el dash basta con hacer:
canDash = true
dir = <1(izquierda) o 0(derecha)>
Tu código hará el resto
Saludos
Gracias por contestar, creo que no me entendiste, mira el dash se podia hacer, el codigo de dash no tiene el problema el problema es el codigo de apretar 2 veces la tecla mi codigo tiene un problema y es el que no es preciso y no siempre lo hace.
Y el codigo que pones lo hace infinitamente mientras tenga apretada la tecla de una direccion.
Saludos
EDITO: El codigo quedo asi:
if (Left)
{
if (DashLeft == false)
{
DashRight = false;
DashLeft = true;
alarm[1] = 15;
}
else
{
canDash = true;
}
}
else if (Right)
{
if (DashRight == false)
{
DashRight = true;
DashLeft = false;
alarm[1] = 15;
}
else
{
canDash = true;
}
}
Hola ZELDA
el problema de ese código es que estás usando las variables "Left" y "Right" como input, que seguramente le asignas valor con: "keyboard_check" en vez de "keyboard_check_pressed".
Eso es lo que causa que el personaje haga dash forever.
Te recomiendo crear dos variables adicionales en el STEP EVENT para detectar sólo el keyboard_pressed.
Ejemplo:
LeftPressed = keyboard_check_pressed(ord("A")) || keyboard_check_pressed(vk_left)
RightPressed = keyboard_check_pressed(ord("D")) || keyboard_check_pressed(vk_right)
De esa forma reemplazas tu código a:
if (LeftPressed)
{
bla bla
}
else if (RightPressed)
{
bla bla
}
Además recuerda tener configurada la Alarma 1 (o el número que quieras ponerle) para desactivar las variables "DashRight" y "DashLeft", o sino no hará la detección de pulsar la tecla 2 veces en 15 steps
Saludos
Muchas gracias ya quedo!