Abril 01, 2013, 06:37:49 AM Ultima modificación: Abril 01, 2013, 12:19:53 PM por raideoul
Ante todo gracias por leer el post. Toda ayuda sera bienvenida.
Acabo de empezar com GM 8 pro y tengo un problema: quiero que mi personaje ataque agachado; tengo 1 sprite para agachado y una animación de 3 frames del ataque agachado. Estoy usando esto en el step event:
if (keyboard_check(vk_down) and suelo=1)
{
  estado=crouch
  hsp=0;
}

'estado' es una variable que uso para el cambio de sprites, como veréis luego, 'hsp' lleva la velocidad de movimiento, así que al pulsar abajo el pers. se para y pasa a estado 'crouch'
else if (estado=crouch and hsp=0)
{
  image_speed=0.5
  if (keyboard_check(vk_space)and canfire=1) sprite_index=FireCR
  else  sprite_index=CrouchR
  }

Aquí el cambio de sprite: si el estado es crouch y se pulsa space y 'canfire' (variable para saber si puede o no disparar) el sprite es FireCR que es la animación  de 3 frames. Si no, el sprite es CrouchR, el de pers. agachado.
El problema es que al pulsar space sólo muestra  1 frame y vuelve a agachado o si mantienes space la muestra entera (la animación). Debería pasar entera, disparar ( esto ya funciona,al final de la animación, porque lo tengo en el end animation event) y volver a agachado.
Sé que el conflicto está en que al tener down pulsado continuamente se va al sprite Crouch, por eso en cuanto suelto space se corta la animación.
¿Cómo puedo evitarlo? o si conoceís un método para tener ataque+agachado animado distinto, por favor decidmelo.
Gracias por vuestra paciencia.

mira:

Ev step:
if keyboard_check(vk_down)
{
if Accion != "Agachado"
{
  Accion = "Agachado";
  sprite_index = sprite_agachado;
}
else
{
  if keyboard_check(vk_space)
  {
    sprite_index = sprite_agachado_golpe;
   }
}
}

//Extra
if keyboard_check(vk_up)
{
if  Accion != "Parado"
{
  Accion = "Parado";
}
}


Ev "animatio end":
if sprite_index == sprite_agachado_golpe
{
sprite_index = sprite_agachado;
}



Fijate si te sirve para algo.

Muchas gracias por responder, pero creo que no me serviría, aunque no estoy seguro.
Finalmente lo he solucionado así:
step:
else if (estado=crouch and hsp=0)
{
  image_speed=0.5
  if (keyboard_check(vk_space)and canfire=1) sprite_index=FireCR
  else if keyboard_check_pressed(vk_down) sprite_index=CrouchR
 
  }

al meter el segundo check, el programa mira si está pulsado abajo desde el último paso y no continuamente. Y para que la animación no sea un loop sin fin:
Animation End:
if ((sprite_index=FireCR) and instance_number (oRedoma)>0)sprite_index=CrouchR
cuando crea el disparo después de la animación vuelve al sprite de agachado.
Funciona pero no sé qué pasará más adelante porque esto es una chapuza.
De todos modos gracias por tu tiempo e interés