Duda código gamemaker

Sawi

No sé que estoy haciendo mal pero llevo toda la tarde atascado en esto y ya la tontería parece que me va a volver loco xD.

Vereis, quiero que cuando un objeto colisione con el otro se reproduzca una animación de 2 frames (el 0 y el 1) y después se destruya el objeto, pero la animación de explosión se reproduce indefinidamente.

Aquí dejo el código con el que he intentado conseguir esto del evento de colisión, que se activa cuando el torpedo toca al enemigo:

image_index=0;
image_speed=0.2;
sprite_index=spr_enemy1_explosion;
audio_play_sound(snd_explosion,1,false);
if (image_index>=1){
instance_destroy();}
FernandoA

No tengo ni idea de gamemaker pero...

image_index=0;  <--- Si pones esto a 0 aquí
......
if (image_index>=1){ <---- Aquí siempre será 0 y por lo tanto nunca lo destruirá, ¿no?

Como he dicho, no tengo ni idea de gamemaker, no entiendo en ese código ni como avanza la animación. ¡Quizás en el if deba ir sprite_index en lugar de image_index?

1 2 respuestas
Sawi

Se supone que lo que hace avanzar el image_index es la variable image_speed, por lo que tal como está puesto creo que image index debería alcanzar la imagen 1 en algún momento xD (que la alcanza porque la animación funciona, lo que no hace es destruir el objeto, por eso estoy tan pilladísimo...)

Estoy pensando en reemplazar el objeto por otro objeto que simplemente haga la animación de explosión y se destruya... pero me parece dar un rodeo un poco tonto jaja

Gracias por la sugerencia FernandoA, a ver si alguien con experiencia en gamemaker se pasa por aquí y me ilumina diciendo que falla, porque... xD

marod

Yo tampoco ni zorra de GM pero lo que dice #2 tiene su lógica, en ningún momento se avanza esa variable...

Suerte, a ver si alguien que sepa se anima.

1 respuesta
Sawi

#4 image_speed se supone que hace avanzar el número del image_index, pero igualmente también he probado antes a poner
image_index +=0.2 y nada...

1 respuesta
marod

#5 ¿No puedes hacer un debug para saber si realmente avanza?

1 respuesta
Kalgator

Pero, no hay bucle, llamas a instance_destroy() y prou

B

lo primero de todo, lo que pasa es lo que dice #2
lo que deberías hacer es en cuanto colisionen, crear un objeto explosión:

en el create event

image_index = 0;
image_speed = 0.2;

y en el step

 if (image_index > image_number - 1) instance_destroy();

mejor usar image_number, que es el numero de imagenes de tu sprite, que poner el 1 a pelo

1
B

y si lo quieres hacer como lo tienes, tendrías que ponerle una variable de que ya ha colisionado porque si no la colision sigue existiendo y va a seguir poniendo a 0 la imagen siempre y nunca se va a cumplir la condición.

1
Sawi

al final lo he hecho por un lado totalmente diferente a lo que buscaba, pero para el apaño creo que vale.

en el evento de colisión

audio_play_sound(snd_explosion,1,false);
instance_change(obj_enemy1_explosion, true);

y luego en el obj_enemy1_explosion he asignado los sprites de explosión al objeto y he creado un animation end event que destruye el objeto al terminar la animación.

Ya digo que lo habré hecho muy cochino, pero soy nuevo en todo esto jaja.

#6 Podré seguro pero todavía no sé jaja

¡Gracias a todos por la ayuda!

1

Usuarios habituales