Phaser游戏开发:如何让血条动画在指定帧停止?
Phaser血条动画指定帧停止问题解决方案
问题核心:
stopOnFrame确实需要帧对象而非帧号,你用this.hpBar.getFrame()是找错了地方——Sprite没有这个方法,帧对象得从对应的动画实例里获取。正确获取帧对象的步骤:
- 先通过动画key拿到动画实例:
this.anims.get('damageAnimation') - 从动画实例的
frames数组中按索引取帧,或者用动画实例的getFrameByIndex()/getFrameByName()方法(根据你的动画帧定义方式选择)
- 先通过动画key拿到动画实例:
修正后的代码示例:
// 获取目标动画实例 const damageAnim = this.anims.get('damageAnimation'); // 计算要停止的帧索引 const targetFrameIdx = this.hp - amountOfDamage; // 拿到对应的帧对象 const targetFrame = damageAnim.frames[targetFrameIdx]; // 播放动画并设置停止帧 this.hpBar.play({ key: 'damageAnimation', startFrame: this.hp }); this.hpBar.stopOnFrame(targetFrame);
- 额外提醒:
- 一定要确保
targetFrameIdx在动画帧数组的合法范围内(0 到 总帧数-1),不然会拿到undefined导致stopOnFrame失效 - 如果你的动画是用帧名称而非索引配置的,把
damageAnim.frames[targetFrameIdx]换成damageAnim.getFrameByName('你的帧名') - Phaser 3里
stopOnFrame必须在play()之后调用,不然不会生效
- 一定要确保
内容的提问来源于stack exchange,提问作者MrToenails
相关产品推荐
相关产品推荐

