2016-04-08 55 views
1

試圖向我的遊戲添加爆炸動畫,但只有精靈的第一幀會因某種原因而播放。 Spritesheet被加載到預加載器中。只有動畫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); 

回答

2

explosions.createMultiple()只創建30個精靈,你還是函數的函數需要明確地向每個sp添加一個動畫儀式。您可以使用一個名稱添加動畫,以及可選的框架等。順便說一句,我建議使用組和動畫不同的名稱,以避免混淆,所以是這樣的:

// 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循環,所以像這樣:

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