javascript 当“not”设置为循环时,Phaser JS中的动画不会播放

euoag5mw  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(104)

我想创建一个动画,它将由某个事件触发,播放一次,然后终止。即使我尝试将repeat: 0anims.play()函数的第二个参数设置为false/blank,这段代码也没有为我做这件事,它只是完全停止动画,什么也不做。

动画代码

this.anims.create({
        key: 'die',
        frames: this.anims.generateFrameNumbers('player', { start: 91, end: 97 }),
        frameRate: 10,
        repeat: 0
    });

触发器代码

if (gameOver) {
        player.setVelocityX(0);
        player.anims.play('die',true);
        return;
    }
flvlnr44

flvlnr441#

我假设您必须在update函数中设置不同的动画。
只要跟踪 * 播放器/精灵 * 是否活着。如果 * 播放器/精灵 * 死了,防止在 "死" 精灵上启动不同的动画。

    • 这里是一个小型演示,展示了以下内容:**
  • (要重现您遇到的问题,只需删除update函数中标记的if/else-块)*
document.body.style = 'margin:0;';

var config = {
    width: 536,
    height: 183,
    physics: { default: 'arcade', },
    scene: {
        preload,
        create, 
        update
    }
}; 

var keys;
var player;
var player_is_dead = false

function preload(){
    this.load.spritesheet(
        'brawler', 
        'https://labs.phaser.io/assets/animations/brawler48x48.png', 
        { frameWidth: 48, frameHeight: 48 }
    );
}

function update(){
  let speed = 50;
  
  // remove this if statment to simulate the issue
  if(player_is_dead){
     return;
  }
  
  if(keys.left.isDown){
      player.body.setVelocityX(-speed);
      player.play('walk', true);
      player.setFlipX(false);
  } else if(keys.right.isDown){
      player.body.setVelocityX(speed);
      player.play('walk', true);
      player.setFlipX(true);
  } else {
      player.body.setVelocity(0)
      player.play('idle', true);
  }
}

function create () {
    this.add.text(10,10, [
            'A - Key move left',
            'S - Key move right',
            'SPACE - Key to kill',
            'ENTER - Key to reset'
        ])
        .setScale(1.5)
        .setOrigin(0)
        .setStyle({fontStyle: 'bold', fontFamily: 'Arial'});

    this.anims.create({
        key: 'walk',
        frames: this.anims.generateFrameNumbers('brawler', { frames: [ 0, 1, 2, 3 ] }),
        frameRate: 8,
        repeat: -1
    });

    this.anims.create({
      key: 'die',
      frames: this.anims.generateFrameNumbers('brawler', { frames: [ 35, 36, 37 ] }),
      frameRate: 8,
    });
    
    this.anims.create({
        key: 'idle',
        frames: this.anims.generateFrameNumbers('brawler', { frames: [ 5, 6, 7, 8 ] }),
        frameRate: 8,
        repeat: -1
    });
  
    player = this.physics.add.sprite(300, 70);
    player.setScale(3.5);
    
    this.input.keyboard.on('keydown-SPACE', _ => {
        player_is_dead = true;
        player.play('die');
    });
    
    this.input.keyboard.on('keydown-ENTER', function (event) {
        player_is_dead = false;
    });
    
    keys = this.input.keyboard.addKeys({
        left: Phaser.Input.Keyboard.KeyCodes.A,
        right: Phaser.Input.Keyboard.KeyCodes.D
    });
}

new Phaser.Game(config);
<script src="//cdn.jsdelivr.net/npm/phaser/dist/phaser.min.js"></script>

本示例基于this official demo

    • 备用解决方案,开始垂死动画:**

一个二个一个一个

相关问题