我正在使用Phaser 3.11
我有自己的精灵动画(行走动画)以及显示动画标题以提示玩家单击(只是一个技巧,以确保音频可以正常播放)。我也有一个动画,画猫的尾巴。
这三个项目在整个项目期间都运作良好。但是突然之间,在我添加了一个新的精灵之后,上述动画中的2/3停止了工作(步行周期和标题)。猫的尾巴仍然奇怪地动了起来。我当然放回了旧的精灵,因为那是我唯一要更改的东西,但是不,这个错误似乎是永久的。
以下代码:
在预加载中:
this.load.spritesheet('dude', 'assets/runner/kel2.png', {
frameWidth: 16,
frameHeight: 28,
});
this.load.spritesheet('buffy', 'assets/runner/buffy.png', {
frameWidth: 43,
frameHeight: 32,
});
this.load.spritesheet('startText', 'assets/runner/clickToStart2.png', {
frameWidth: 351,
frameHeight: 250,
});
在创建中:
player = this.physics.add.sprite(playerStart, 260, 'dude').setScale(1.3)
this.anims.create({
//animations created are available globally, belonging to the game objects themselves!
key: 'left',
frames: this.anims.generateFrameNumbers('dude', { start: 0, end: 3 }),
frameRate: 10,
repeat: -1,
//use frames 0,1,2,3 at 10 fps, and -1 repeat tells it to loop
});
this.anims.create({
key: 'turn',
frames: [{ key: 'dude', frame: 4 }],
frameRate: 20,
});
this.anims.create({
key: 'right',
frames: this.anims.generateFrameNumbers('dude', { start: 5, end: 8 }),
frameRate: 10,
repeat: -1,
});
buffy = this.physics.add.sprite(3170, 270, 'buffy');
this.anims.create({
key: 'curl',
frames: this.anims.generateFrameNumbers('buffy', { start: 0, end: 1 }),
frameRate: 2,
repeat: -1,
});
startText = this.physics.add.staticSprite(240, 150, 'startText');
this.anims.create({
key: 'clickToStart',
frames: this.anims.generateFrameNumbers('startText', { start: 0, end: 1 }),
frameRate: 2,
repeat: -1,
});
更新中:
if (cursors.left.isDown) {
player.setVelocityX(-100);
player.anims.play('left', true);
} else if (cursors.right.isDown) {
player.setVelocityX(100);
player.anims.play('right', true);
} else {
player.setVelocityX(0);
player.anims.play('turn');
}
buffy.anims.play('curl', true);
startText.anims.play('clickToStart', true);
再次,更新(buffy.anims.play)倒数第二个工作正常 但是,其他所有内容都停留在一帧上。有人遇到过这样的事情吗?我已经谷歌搜索了一个多小时,但无济于事。
cat spritesheet (the working one)
编辑添加:
我修复了标题屏幕精灵。那不是小故障,我只是不小心将它封闭在一个if块中,该块取决于游戏是否已经开始。拿出来,一切都很好。但是,精灵行走动画仍然不起作用。还是没主意。
编辑2:
深入研究console.logs之后,我诊断出:
a)程序确实没有循环访问其帧数组中的帧(向左或向右旋转,当前帧仅为0或5,但是如果我在工作的地方签出了先前的提交,它将变为0,1 ,2,3和5,6,7,8)
b)程序可以访问帧数组。又名generateFrameNumbers正在工作。如果我将console.log转到sprite上的getTotalFrames(),然后向左或向右移动,则分别为每个提供4个(应有的情况下分别为1个)。
c)如果我手动设置起始帧,它将改变。它仍然会冻结,但是会根据我在anims.play中将其设置为起点的情况,冻结在直腿和步行腿上。同样,它具有所有框架,只是没有循环。