Ya ando un poco mareado con este tema. De momento lo estoy haciendo en D&D.

He creado un personaje en un laberinto. Cuando la calavera de turno colisiona con nosotros, quiero que muestre un sprite de explosión, un sonido y luego desaparezca.

Pues el sonido lo hace, pero el sprite de explosión no. Y luego desaparece el enemigo.

En los eventos del enemigo he puesto (Cuando colisiona con nosotros):

-Change sprite (animación de la explosión).
-Play sound explosion.
-Destroy instance.

Osea, tres acciones.

El sprite de explosión no lo tengo definido luego como objeto. Solo como sprite.

Al destruirla desaparece al momento y no das tiempo a mostrar el sprite. Simplemente al colisionar, cambia el sprite y da el sonido, SIN DESTRUIRLA. Luego, en el evento Animation end, haz la destrucción, así se destruirá en ese evento, que significa "al acabar la animacion".

Pon algo como...
if sprite_index = calaveraDestruccion instance_destroy();
lo siento, no sabría hacerlo en D&D. La cuestión es, en el evento animation end ocurren cosas cuando acaba una animacion, pero queremos que se destruya SOLO al acabar la animacion de explosion, no las otras. Asi que ponemos "si el sprite_index, o sea, el sprite, es el de explosion, te destruyes". Así evitas activar el evento al terminar las animaciones normales de la calavera.