仅播放动画spritesheet的第一帧

时间:2016-04-08 19:04:54

标签: javascript phaser-framework

尝试在我的游戏中添加爆炸动画,但只有精灵的第一帧出于某种原因才能播放。 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);

1 个答案:

答案 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