Tengo una animacion de idle y otra de ataque de cada animacino tengo izquierda y derecha. El jugador esta estatico no camina y empieza la partida mirando a la derecha y en el evento steo tengo esto para las animaciones:

if  keyboard_check_pressed(vk_left){
sprite_index=spr_ataque_izquierda
image_speed=0.2

}
if  keyboard_check_pressed(vk_right){
sprite_index=spr_ataque_derecha
image_speed=0.2
}

if sprite_index=spr_ataque_derecha and image_index>=5{sprite_index=spr_parado_derecha image_speed=0.2  }
if sprite_index=spr_ataque_izquierda and image_index>=5{sprite_index=spr_parado_izquierda image_index=0.2 }
las animaciones de ataque tiene 6 frames, en los dos ultimos if comprueblo por cada lado que si la animacion es de ataque cuando el indice de la imagen sea mayor o = a 5 pues que se cambie de animacion de parado mirando al lado que estuviera atacando.

Esto es lo que tengo pero no funciona bien cuando pulsas la tecla para atacar pocas veces funciona bien por que se suele atascar la animacion o hacer cosas raras, solo suele hacer un frame o dos de la animacion de ataque.

#1 Octubre 03, 2014, 05:46:03 AM Ultima modificación: Octubre 03, 2014, 05:51:28 AM por penumbra
Realmente no es necesario tener una animación para izquierda y otra para derecha. Con una sola animación es suficiente, porque si se quiere "voltear" la imagen sólo hay que hacer
[gml]image_xscale = -1[/gml]

Si en todas las animaciones, la velocidad siempre es la misma (como en este caso), tampoco es necesario especificar cuatro veces la velocidad, símplemente se especifica una vez en el evento CREATE del personaje
[gml]image_speed = 0.2[/gml]

Tienes un error aquí
Cita de: carras en Octubre 03, 2014, 05:16:52 AM
if sprite_index=spr_ataque_derecha and image_index>=5{sprite_index=spr_parado_derecha image_speed=0.2  }
if sprite_index=spr_ataque_izquierda and image_index>=5{sprite_index=spr_parado_izquierda image_index=0.2 }
sprite_index=spr_parado_izquierda image_index=0.2
Creo que debería ser image_speed en lugar de image_index

Según lo que he experimentado en GM, cuando pasas de un sprite a otro, el índice de imagen no se reinicia. Es decir, supongamos que la animación de correr tiene 10 subimagenes, y que cuando está en la subimagen 6 pasa a estar quieto, pues el sprite de quieto no se muestra desde la subimagen 0, sino que se muestra desde la 6. Para evitar esto, en los keyboard_check_pressed deberías poner image_index = 0 y así asegurar que las animaciones comiencen desde su primer subimagen. Este mismo consejo aplica para los dos últimos ifs donde pasas de ataque a idle



Muchas gracias :D no sabia lo de las subimagenes, una cosa mas, cuando pulso la tecla left o right si la mantengo pulsada sigue haciendo la animacion... hay alguna manera de decirle que solo lo haga una vez.. vamos que cuando yo pulse la tecla que solo  detecte una vez la pulsacion, no continuamente.

if image_index >= image_number image_speed = 0;
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Cita de: kostra en Octubre 04, 2014, 05:56:08 PM
if image_index >= image_number image_speed = 0;
De hecho debería ser
if image_index >= image_number-1
     image_speed = 0;

Porque la primer subimagen comienza siempre en 0

A mi me gusta usar el evento Animation end, aunque el código que sugirió kostra es más directo
ANIMATION END
[gml]
if sprite_index = spr_ataque
{
     sprie_index = spr_idle
     image_index = 0
}[/gml]


yo siempre puse eso y me ha funcionado bien :/
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]