Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Kain88 en Marzo 19, 2015, 11:44:50 PM

Título: Combos
Publicado por: Kain88 en Marzo 19, 2015, 11:44:50 PM
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;
Título: Re:Combos
Publicado por: penumbra en Marzo 20, 2015, 03:06:26 AM
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.
Título: Re:Combos
Publicado por: Kain88 en Marzo 20, 2015, 05:31:09 AM
Penumbra al rescate, como siempre jaja. Me podrias poner un ejemplo de como chequear si se presiona el golpe  entre determinadas subimagenes?
Título: Re:Combos
Publicado por: penumbra en Marzo 20, 2015, 05:44:57 AM
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
Título: Re:Combos
Publicado por: Kain88 en Marzo 20, 2015, 06:01:39 AM
Buenisimo, mi duda era lo de chequear image_index con image_number. Gracias!