Junio 11, 2015, 07:59:29 PM Ultima modificación: Junio 11, 2015, 08:01:42 PM por Yoo
Estaba en un juego y de repente al morir, el personaje tenía que acer una buena animación, entonces creé un sprite que contiene unas 6 images, del 0 al 3 se ve agonizando, y de la 4 a 6 se ve que se cae, entonces, la pregunta es:
1. Pongo en el END STEP, (con el propósito de que agonize por un tiempo y después se caiga y se quede tirado un tiempo) :

if die==1{
    image_speed=0.3;sprite_index=spr_die;
    if (alarm[1]==51)image_index=4;// esta es la image que empieza el desmayo(image 4)
    if (alarm[1]==-1)alarm[1]=100;// la alarm es para que reinicie el juego
    if (image_index==3)image_index=0;// si está en la image 3 ,pasa a la image 0(repitiendo el agonizamiento)
    if (image_index==6)image_single=6;}// al caer, se queda en la image 6 osea tirado en el suelo

HIZO TODO esto, pero no funciona, aparece cayendo y luego agoniza, y otras veces agoniza, cae, agoniza, cae, y obviamente al final -al cumplirse la alarm- se reinicia el juego.
¿ALGUIEN me EXPLICA  porqué sucede eso? y ¿CUAL es la forma CORRECTA O MEJOR forma de hacerlo?
GRACIAS DE ANTEMANO.

NOTA: TEngo 2 minipreguntitas más  :D :
1.¿CUAL es la mejor manera de dar animacion:por el evento draw(dibujando sprites:EVENT DRAW) o de la manera normal(sprite_index...)?  XD

2.¿Los codigos de animacion deben ir en que evento?¿End Step?¿Begin Step?¿al final de Step?¿Dónde?!  XD

¡GRACIAS!
- Empty -

Haber, un par de dudas.
Cuantos sprites tienes?, Tienes uno para el andar, atacar, etcc, O todos juntos en uno, subdivido en subimagenes??
Lo mejor es tener varios spriter, para mi.

Luego, en el evento que tu uses para quitar vida, pones
If vida < 1 {sprite_index = sprAgonizando}

Luego, aquí tienes varias opciones.
Por ejemplo, si quieres que agonice mas tiempo, puedes poner en ese código  ;imagen_speed= 0.01 (o el valor que quieras).
También puedes poner en el evento END ANIMATION
If sprite_index = sprAgonizando {image_speed=0,image_index=3}  Esto hace que cuando se haga la animación de agonizar, se quede parada la animación y no ande mas y suponiendo que tenga 4 subimagenes.

Ahora, si quieres más, puede poner que en este evento, se active una alarma
If sprite_index = sprAgonizando {image_speed=0,image_index=3; alarm[0]=room_speed} alarma 1 segundo.

ALARM[0]
sprite_index= sprMuriendo; image_speed = 0.5  (o la que quieras)

END ANIMATION
if sprite index= sprMuriendo {alarm[1]=room_speed; image_index=3; image_speed=0}

ALARM[1]
reset_room  ( o lo que quieras hacer)

Espero haber ayudado.

Cita de: Yoo en Junio 11, 2015, 07:59:29 PM
2.¿Los codigos de animacion deben ir en que evento?¿End Step?¿Begin Step?¿al final de Step?¿Dónde?!  XD
No hay una regla escrita en piedra de dónde deben ir, depende del programador. Yo los uso en END STEP, pero más que nada es para separar el código de animación del código colisión y otras cosas que meto en STEP normal.

Cita de: Yoo en Junio 11, 2015, 07:59:29 PM
¿ALGUIEN me EXPLICA  porqué sucede eso? y ¿CUAL es la forma CORRECTA O MEJOR forma de hacerlo?

Aunque no lo dices explícitamente, parece que quieres que la animación reproduzca los frames en este orden (según el tercer if): 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6.

Si esto es así y siempre quieres que así sea la animación, una solución podría ser que edites el sprite para que la animacion de agonía se reproduzca dos veces y en seguida siga la de muerte.

Si en lugar de editar el sprite, quieres hacer la repetición de agonía mediante código, lo que debes saber es que LA PEOR manera de controlar una animación es mediante alarmas, por lo que yo te sugeriría no usar la alarma para controlar el desmayo. Crea una variable desmayo que sea cero.

STEP
"Si desmayo es 0 e image index es MAYOR O IGUAL a 3, volver al frame 0 y ajustar desmayo a 1"

En el evento ANIMATION END:
"Si desmayo es 1, hacer que image_speed sea 0, para detener la animación cíclica del sprite y llamar a la alarma que reinicia el juego"

GRACIAS POR SUS RESPUESTAS...
1. Prefiero hacer la agoni y desmayo en un solo sprite, porque pienso que ahorra espacio,corrijanme si me ekivoco!
2. KIero una animacion algo asi: 0 1 2 3 0 1 2 3 0 1 2 3 (mas omenos una 5 vueltas) 4 5 6 (desmayo).
OK, gracias, pero kiero coger el camino mas eficiente y el quede demande menos espacio  XD
- Empty -

Cita de: Yoo en Junio 12, 2015, 09:16:46 PM
GRACIAS POR SUS RESPUESTAS...
1. Prefiero hacer la agoni y desmayo en un solo sprite, porque pienso que ahorra espacio,corrijanme si me ekivoco!
Dependiendo del tamaño del sprite, en disco te vas ahorrar algunos cientos de Kylobytes, y en memoria quizás algunos Megabytes, pero en el 99% de los casos, no creo que este ahorro vaya a hacer diferencia, vamos, que ni siquiera se va a notar (a menos que esta animación se vaya a reproducir por distintas instancias a la vez).

Cita de: Yoo en Junio 12, 2015, 09:16:46 PM
2. KIero una animacion algo asi: 0 1 2 3 0 1 2 3 0 1 2 3 (mas omenos una 5 vueltas) 4 5 6 (desmayo).
En ese caso vas a necesitar implementar un contador para saber cuántas veces repetir la animación, algo así (o similar)
[gml]
if (contador < 5) and (image_index >= 3)
     {
          image_index = 0
          contador += 1
      }
}
[/gml]