Definitivamente uno de los mayores dolores de cabeza que genera el game maker es con las animaciones de los sprites XD
Mi personaje tiene salto y doble salto, estoy usando este codigo:
Create event:
//Salto
can_jump = 1;
jumps = 2; second_jump = 0;
Step event:
//Movimiento vertical
vsp += grv;
if (place_meeting(x, y + 1, obj_wall))
{
jumps = 2;
}
if (key_jump) && (jumps > 0)
{
jumps -= 1;
vsp = -jsp;
}
//DIRECCIONES Y SALTO
if (place_meeting(x, y + 1, obj_wall))
{
if (hsp != 0)
{
sprite_index = spr_psylocke_run;
image_speed = 0.2;
}
}
else
{
if (vsp < 0)
{
sprite_index = spr_psylocke_jump;
image_speed = 0.05;
}
else
{
land = 1;
sprite_index = spr_psylocke_fall;
}
}
//Segundo salto
if (vsp < 0 ) && (jumps = 0)
{
second_jump = 1;
can_jump = 0;
}
if (second_jump = 1)
{
sprite_index = spr_psylocke_jump_2;
image_speed = 0.1;
}
if (vsp > 0) second_jump = 0;
El doble salto me funciona perfecto, el problema esta en las animaciones: el sprite de segundo salto tiene 4 subimagenes, pero cuando se ejecuta solo corre las 2 primeras y se repite. Sin embargo probe ejecutando el sprite si "vsp es > 0" y corre con todas las subimagenes. Ya intente todo y no lo puedo solucionar, alguna ayuda?
EDIT: Al principio del evento Step tambien tengo:
if (key_jump) && (can_jump = 1) image_index = 0;
Hice varias pruebas y encontré la fuente del problema:
El sprite de salto consta de dos imágenes, y lo que sucede es que cuando presiono salto de nuevo y la animación cambia al segundo salto, esta ultima es como que se acopla a la animación del primer salto y solo corre las dos primeras imágenes.
La verdad que a esta altura el programa no deberia contar con esos errores, ya que le indique de toda forma posible (image_index, etc.) que la animacion del segundo salto corra aparte y el problema persiste.
Una vez mas después de probar por unas horas lo solucione:
Le agregue un par de imagenes más al primer salto para que tenga la misma cantidad de subimagenes que la animacion del segundo salto, y ahora ambos corren bien.
Aparentemente esta es al unica solucion que hay, ya que me fije en internet en la comunidad game maker de estados unidos y todos los que tuvieron el mismo problema no lo pudieron solucionar con codigo, asi que se me ocurrio este metodo.