尝试在我的游戏中添加爆炸动画,但只有精灵的第一帧出于某种原因才能播放。 Spritesheet加载到预加载器中。
这是调用动画的功能
function asteroidCollisionHandler(player, asteroid){
live = lives.getFirstAlive();
if (live)
{
live.kill();
}
explosion = explosions.getFirstExists(false);
explosion.reset(player.body.x, player.body.y);
explosion.play('explosion', 30, false, false);
if (lives.countLiving() < 1)
{
player.kill();
}
}
创建创建爆炸组的功能
explosions = game.add.group();
explosions.createMultiple(30, 'explosion');
预载
this.load.spritesheet('explosion', 'images/explode.png', 128, 128, 16);
答案 0 :(得分:2)
行explosions.createMultiple()
只创建30个精灵,你仍然需要为每个精灵显式添加一个动画。您可以添加带有名称的动画,也可以添加框架等。顺便说一下,我建议为组和动画使用不同的名称以避免混淆,所以像这样:
// initialise animations in the Create() function:
for (var i = 0; i < grpexplosions.children.length; i++) {
grpexplosions.children[i].animations.add('animexplode', [0,1,2,3], 30, true, false);
//grpexplosions.children[i].animations.add('animexplode'); // alternatively, leave frames null to use all frames
};
// and then when you need one:
explosion = grpexplosions.getFirstExists(false);
explosion.play('animexplode', 30, false, false);
顺便说一下你也可以使用group.callAll()作为快捷方式而不是for-loop,所以像这样:
var framesIndex = [0,1,2,3]; // or names
grpexplosions.callAll('animations.add', 'animations', 'animexplode', framesIndex, 30, true, false);
//grpexplosions.callAll('animations.add', 'animations', 'animexplode'); // frames optional, this will simply add all frames