2016-04-08 10 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'); 

Preloader

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

ответ

2

Линия explosions.createMultiple() создает только 30 спрайтов, вы по-прежнему необходимо явно добавить анимацию в каждую из sp обряды. Вы можете добавить анимацию с именем, и, возможно кадры и т.д. Btw Я рекомендую использовать различные названия для группы и анимации, чтобы избежать путаницы, так что-то вроде этого:

// 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 вы можете также использовать 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 
Смежные вопросы