Hola, el personaje del juego que estoy haciendo hace combos, por ejemplo "ZZ", al presionar Z la primer vez tira un golpe, y si se presiona Z de nuevo antes de que se active la alarma tira el segundo golpe. El problema es que no logro que acabe la animacion del primer golpe y recien ahi haga el segundo, osea si presiono Z dos veces rapidamente, el segundo golpe tapa al primero.
Ya intente con variables en animation end, para que la segunda animacion se active cuando termina la primera y nada.
Este es el codigo que uso:
en Create event
can_hit = 0;
En Step
if (key_punch) && (can_hit = 0)
{
image_index = 0;
}
if (place_meeting(x, y + 1, obj_wall))
{
if (key_punch)
{
if (can_hit = 0)
{
can_hit += 1;
sprite_index = spr_player_up_sword_1;
image_index = 0;
image_speed = 0.2;
alarm[0] = 30;
exit;
}
if (can_hit = 1)
can_hit += 1;
sprite_index = spr_player_up_sword_2;
image_index = 0;
image_speed = 0.2;
alarm[0] = 25;
exit;
}
}
}
En Alarm 0
can_hit = 0;
Usar animation end no es muy útil en este caso, porque el cambio de sprite no depende directamente de que se termine una animación, sino de el momento en que se presiona un botón.
Aunque es posible usar una alarma, creo que hay maneras más convenientes de validar el combo,
Lo que me parece mejor es revisar el estado de la animación actual. Por ejemplo, si la primer animación se compone de 10 subimagenes, y quiero enlazar golpes, yo revisaría que, mientras sprite_index correspondiera al primer sprite, se presione la tecla de golpe entre las subimagenes 7 y 9 (las últimas 3, por poner un ejemplo).
Si se presiona en ese lapso de tiempo, el combo es válido, se resetea image_index y se cambia sprite_index a la segunda animación. Si el golpe no se da entre los frames 7 y 9, pues sencillamente se pierde el combo
Revisar image_index se me hace más preciso y efectivo. La velocidad de animación se puede cambiar y el código seguirá funcionando. Esto no pasaría al usar alarmas.
Penumbra al rescate, como siempre jaja. Me podrias poner un ejemplo de como chequear si se presiona el golpe entre determinadas subimagenes?
Suponiendo que el sprite tiene 10 subimagenes y que "A" es la tecla de golpe
[gml]
if (sprite_index == sprite_golpe1) and (image_index > 4) and (image_index < image_number - 2)
{
if keyboard_check_pressed(ord('A'))
{
image_index = 0
sprite_index = sprite_golpe2
}
}[/gml]
Esto haría que el combo sea válido si se da un golpe entre las subimágenes 6 y 9, y se cambie la animación al segundo golpe
Buenisimo, mi duda era lo de chequear image_index con image_number. Gracias!