Я пытаюсь написать демонстрационное приложение, чтобы узнать, как лучше использовать спрайт-листы в Cocos2d. Пока я получил готовые спрайты, лист выглядит великолепно, код выглядит хорошо ... но спрайты не отображаются!
У меня есть объекты Dice, которые содержат спрайт, и некоторые функции для выбора случайного лица перед анимацией матрицы на экране. Это должно быть так, как будто ты их катишь.
Порядок операции, который я использовал:
- Добавить список данных спрайта в кэш кадра
- Создание узла пакета листа спрайта
- Инициализировать объекты Dice, выбрать случайную грань и добавить их на лист спрайтов (узел партии)
- Добавление листа спрайта (пакетного узла) в игровой слой
Вот ссылка на весь проект. Не стесняйтесь нанести удар.
https://github.com/rnystrom/MartionDemo
Вот фрагменты того, что я описал выше, и того, что делает объект Dice:
// Add spritesheet to the sprite cache
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"spritesheet.plist"];
self.spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"spritesheet.png"];
for (int i = 0; i < kNumDice; ++i) {
// Create Dice object
// CODE BELOW HAPPENS HERE AT initRandom
Dice* d = [[Dice alloc] initRandom];
// Add die to spritesheet
[self.spriteSheet addChild:d.sprite];
// Add Dice object to the array of rollable dice
[rollDiceArray addObject:d];
}
// Add spritesheet to the game layer
[self addChild:self.spriteSheet];
Вот краткое изложение того, что происходит при инициализации игры в кости (см. InitRandom выше):
// ... Sets up stuff like the # of frames, picking a random side of the die, etc ...
// Add each frame to the frames array
for(int i = 1; i <= numberFrames; i++) {
if (i < 10) {
[frames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"%@0%d.png", self.face, i]]];
}else{
[frames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"%@%d.png", self.face, i]]];
}
}
// Animation object with 0.04 seconds between each frame (~30fps)
CCAnimation *anim = [CCAnimation animationWithFrames:frames delay:0.04f];
// Update the sprite with the new frames
self.sprite = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"%@01.png", self.face]];
// Animate the sprite
[self.sprite runAction:[CCAnimate actionWithAnimation:anim restoreOriginalFrame:NO]];