代码之家  ›  专栏  ›  技术社区  ›  Koffee

动画继续使用update()重新启动,而不是在Phaser 3中正常播放

  •  1
  • Koffee  · 技术社区  · 11 月前

    我使用的是Phaser 3的最新版本,仅支持javascript(没有TS)。

    我有一个主场景,其中包含对Sprite对象self-update方法的更新,如下所示:

    MainGame.js

    export default class MainGame extends Phaser.Scene
    {
       create ()
       {
              this.player = new Player({
                   scene: this,
                   x    : 100,
                   y    : 100
              });
       }
    
       update () 
       {
           this.player.update();
       }
    

    Player对象更新方法如下:

    Player.js

    export default class Player extends Phaser.GameObjects.Sprite
    {
       constructor(config)
       {
           super(config.scene, config.x, config.y, 'player');
           this.scene = config.scene;
           this.scene.add.existing(this);
       }
    
       update() {
          this.anims.play('idle_loop');
       }
    

    出于某种原因,循环卡在第1帧,因为它不断地重新启动动画循环(我想每次都会重新启动 使现代化 被称为)。

    我的问题: 循环并没有循环播放精灵动画,而是不断快速重启,只显示循环的第一帧。

    笔记: 其他一切(用于动画、加载等的Atlas)都很好,事实上,如果我将play()调用从update()移动到create方法,就没有问题。

    1 回复  |  直到 11 月前
        1
  •  0
  •   winner_joiner    11 月前

    问题是,您需要传递第二个参数,其值为 true ,到 play 作用 link to the documentation ). 因此,只要仍在播放,移相器就不会重新启动动画,并忽略此调用。

    大致如下:

    ... 
    update () {
        this.anims.play('idle_loop', true);
    }