Phaser 3角色行走动画失效并冻结游戏,精灵表帧加载异常求助
Phaser 3 行走动画导致游戏冻结问题解决
问题场景
为游戏角色制作8帧行走动画,编写相关代码后,按下移动按钮游戏出现冻结,控制台反复提示:
generateFrameNumbers: Frame 0 missing from texture: peefSide
帧数逐次递增后出现读取undefined属性的错误。使用环境为VSCode + Phaser 3 + Arcade Physics。
相关代码如下:
加载精灵表
this.load.spritesheet('PeefSide', "assets/PeefSide.png", {frameWidth: 50, frameHeight: 60, startFrame: 0, endFrame: 7});
创建精灵
this.p1 = this.physics.add.sprite(500, 730, 'PeefSide');
创建动画
this.anims.create({ key: 'walk', frames: this.anims.generateFrameNumbers('peefSide', { start: 0, end: 7, first: 0}), frameRate: 10, repeat: -1 });
移动时播放动画
if(this.keyA.isDown) { this.p1.setVelocityX(-200); this.p1.anims.play('walk', true); }
错误原因
Phaser 3的纹理名称严格区分大小写:加载精灵表时使用的纹理名称是'PeefSide'(首字母大写),但创建动画时调用generateFrameNumbers传入的是'peefSide'(小写p),导致Phaser无法找到对应的纹理资源,进而反复尝试生成不存在的帧数据,最终引发游戏冻结。
修复方案
统一纹理名称的大小写,将创建动画代码中的'peefSide'改为'PeefSide',与加载时的名称完全一致。
修正后的创建动画代码
this.anims.create({ key: 'walk', frames: this.anims.generateFrameNumbers('PeefSide', { start: 0, end: 7, first: 0}), frameRate: 10, repeat: -1 });
额外检查项
- 确认
assets/PeefSide.png路径正确,图片文件存在且未损坏 - 确保
frameWidth和frameHeight参数与精灵表实际单帧尺寸匹配,避免帧切割错误
内容的提问来源于stack exchange,提问作者EmptyStone
相关产品推荐
相关产品推荐

