Tengo una animación, que generalmente se supone que debe reproducirse 3 veces, por lo que la configuración actualmente dice repeat: 2 . Sin embargo, bajo cierta condición (el jugador deja de arrastrar un elemento) quiero que la animación termine y se detenga sin repetir.
Con eso quiero decir que no quiero que se detenga justo en el cuadro en el que se encuentra en el segundo, sino que quiero que termine de reproducirse hasta el último cuadro que asigné en frames y luego se detenga antes de que se repita.
¿Cómo sería capaz de hacer esto?
// ANIMATION CREATED HERE this.anims.create({ key: "nom", frameRate: 12, frames: this.anims.generateFrameNames("chara", { prefix: "nom_000", start: 0, end: 4}), repeat: 2, }); this.input.on('drag', (activePointer, gameObject, dragX, dragY) => { gameObject.x = dragX; gameObject.y = dragY; if(Phaser.Geom.Intersects.RectangleToRectangle(gameObject.getBounds(), character.mouth.getBounds())) { gameState.snack_cursor.play("fries_cursor", true); // ANIMATION PLAYED HERE character.sprite.play("nom", true); } }); this.input.on('dragend', (pointer, gameObject, dragX, dragY) => { if (gameObject.anims.isPlaying) gameObject.anims.stop(); // ANIMATION STOPS HERE, BUT CURRENTLY AT WHATEVER FRAME IT'S AT if (character.sprite.anims.isPlaying) character.sprite.anims.stop(); });Puede utilizar la función stopAfterRepeat ( documentación ).
Simplemente llámelo con el parámetro 0 , y la animación actual finalizará, antes de que se detenga la animación. Creo que esto es lo que buscas.
... character.sprite.anims.stopAfterRepeat(0); ...