es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo reproducir una animación solo si aún no hay una en Phaser?

Lo que quiero hacer es reproducir una animación en un sprite cada vez que se presiona una tecla.

Mi código (extracto) se ve así:

function update() {
    if (keys["w"].isDown) {
        avatar.setVelocityY(-250);
    }
    if (keys["d"].isDown) {
        avatar.setVelocityX(250);
    }
    if (keys["a"].isDown) {
        avatar.setVelocityX(-250);
    }
    if (keys["s"].isDown) {
        avatar.setVelocityY(250);
        avatar.play("run_front");
    }
}

El problema: Cuando presiono “s”, solo se reproduce el primer frame de la animación y la animación solo se completa cuando dejo de presionarla.

Creo que esto se debe a que la animación se sobrescribe cada vez que presiono “s”.

Entonces, ¿cómo puedo ejecutar la animación solo si la anterior no se está reproduciendo todavía?

Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, podemos usar la propiedad isPlaying del objeto Sprite de Phaser para verificar si la animación se está reproduciendo actualmente antes de iniciarla nuevamente. Aquí hay un extracto actualizado del código:

    function update() {
      if (keys["w"].isDown) {
        avatar.setVelocityY(-250);
      }
      if (keys["d"].isDown) {
        avatar.setVelocityX(250);
      }
      if (keys["a"].isDown) {
        avatar.setVelocityX(-250);
      }
      if (keys["s"].isDown) {
        avatar.setVelocityY(250);
        if (!avatar.anims.isPlaying) { // verificar si la animación no se está reproduciendo actualmente
          avatar.play("run_front"); // reproducir animación solo si no se está reproduciendo ya
        }
      } else { // detener la animación si la tecla no está presionada
        avatar.anims.stop();
      }
    }
    

    En este código actualizado, primero verificamos si se presiona la tecla “s” y, de ser así, verificamos si la animación no se está reproduciendo actualmente utilizando la propiedad isPlaying. Si la animación no se está reproduciendo, la iniciamos usando el método play. Si la tecla no está presionada, detenemos la animación usando el método stop. Esto asegurará que la animación se reproduzca sin problemas cada vez que se presione la tecla “s”.

Comments are closed.