如何仅在精灵在 Phaser 3 中移动时播放动画?
How to only play animation while a sprite is moving in Phaser 3?
我正在 Phaser 3 中创建一个游戏,使用物质物理学,就像我以前做过的那样。然而,直到现在我从未 运行 解决过一个问题,涉及动画和移动。我希望我的动画只在玩家移动时播放,并在他停止移动时停止,就像玩家在真实游戏中一样。
我尝试了各种 do-while 循环,使用 "animationcomplete"
和不使用它。我也试过让我的动画循环 (repeat: -1
) 并将它设置为只执行一次。
我知道,.isDown
跟踪键并在按下时执行以下代码,而 .JustDown
只执行一次。我也不确定在那里使用哪个。
动画代码
//Animations
//Running right animation
var runRightFrameNames = this.anims.generateFrameNames(
'sheet', {start: 14, end: 16, zeroPad: 4,
prefix : 'run_right/'}
);
this.anims.create({
key: 'runRight', frames: runRightFrameNames, frameRate: 1, repeat: 0
});
update()
函数中的当前代码,不是我尝试过的唯一代码
//If the right arrowkey is pressed
if (this.arrowKeys.right.isDown) {
//Move player
this.hero.setVelocityX(5);
//Play animation
this.hero.anims.play('runRight');
//When animation is done, stop hero
this.hero.on("animationcomplete", () => {
this.hero.setVelocityX(0);
});
}
您可以像这样修改您的代码片段:
//If the right arrowkey is pressed
if (this.arrowKeys.right._justDown) {
console.log('Cursor right is pressed!');
//Move player
this.hero.setVelocityX(5);
//Play animation
this.hero.anims.play('runRight');
} else if (this.arrowKeys.right._justUp) {
console.log('Cursor right is NOT pressed!');
}
编辑:
要修复英雄的动画,请将此行 this.hero.anims.play('runRight');
更改为 this.hero.anims.play('runRight', true);
您还应该将 repeat
值更改为 -1
,如下所示:
this.anims.create({
key: 'runRight', frames: runRightFrameNames, frameRate: 6, repeat: -1
});
我正在 Phaser 3 中创建一个游戏,使用物质物理学,就像我以前做过的那样。然而,直到现在我从未 运行 解决过一个问题,涉及动画和移动。我希望我的动画只在玩家移动时播放,并在他停止移动时停止,就像玩家在真实游戏中一样。
我尝试了各种 do-while 循环,使用 "animationcomplete"
和不使用它。我也试过让我的动画循环 (repeat: -1
) 并将它设置为只执行一次。
我知道,.isDown
跟踪键并在按下时执行以下代码,而 .JustDown
只执行一次。我也不确定在那里使用哪个。
动画代码
//Animations
//Running right animation
var runRightFrameNames = this.anims.generateFrameNames(
'sheet', {start: 14, end: 16, zeroPad: 4,
prefix : 'run_right/'}
);
this.anims.create({
key: 'runRight', frames: runRightFrameNames, frameRate: 1, repeat: 0
});
update()
函数中的当前代码,不是我尝试过的唯一代码
//If the right arrowkey is pressed
if (this.arrowKeys.right.isDown) {
//Move player
this.hero.setVelocityX(5);
//Play animation
this.hero.anims.play('runRight');
//When animation is done, stop hero
this.hero.on("animationcomplete", () => {
this.hero.setVelocityX(0);
});
}
您可以像这样修改您的代码片段:
//If the right arrowkey is pressed
if (this.arrowKeys.right._justDown) {
console.log('Cursor right is pressed!');
//Move player
this.hero.setVelocityX(5);
//Play animation
this.hero.anims.play('runRight');
} else if (this.arrowKeys.right._justUp) {
console.log('Cursor right is NOT pressed!');
}
编辑:
要修复英雄的动画,请将此行 this.hero.anims.play('runRight');
更改为 this.hero.anims.play('runRight', true);
您还应该将 repeat
值更改为 -1
,如下所示:
this.anims.create({
key: 'runRight', frames: runRightFrameNames, frameRate: 6, repeat: -1
});