2016-04-08 16 views
1

Oyunuma bir patlatma animasyonu eklemeye çalışıyorum, ancak hareketli grafiğin yalnızca 1 karesi bir nedenle oynatılıyor. Sprite levha ön yükleyiciye yüklenir. Animasyon ayrıntı sayfasının yalnızca ilk karesi oynatılıyor

Bu

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(); 
} 

} 

patlama grubu

explosions = game.add.group(); 
explosions.createMultiple(30, 'explosion'); 

Preloader

this.load.spritesheet('explosion', 'images/explode.png', 128, 128, 16); 

cevap

2

explosions.createMultiple() sadece 30 sprite oluşturur hat, yine yaratır işlev oluşturun animasyon aradığını fonksiyondur sp'nin her birine açıkça bir animasyon eklemeniz gerekir ayinleri. Bir ada sahip bir animasyon eklemek ve çerçeveler isteğe vb Btw ben karışıklığı önlemek için grubu ve animasyon için farklı adlar kullanmanızı öneririz, bu nedenle böyle bir şey olabilir:

// 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); 

Btw de group.callAll kullanabilirsiniz() for-loop yerine bir kısayol olarak, yani şöyle bir şey:

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