в проекте, над которым я работаю, у меня есть несколько персонажей, на которые вы можете играть (в этом случае я буду называть их беспилотными). В моих играх у меня есть все настройки физики через _drone. Файл .CCB, созданный с помощью spritebuilder. Раньше у меня был этот файл, анимированный через spritebuilder, но теперь с добавлением нескольких дронов на выбор я должен настроить его для отображения и циклического перехода через соответствующие кадры. Я весь день смотрю на вещи, связанные с этим, и большинство ответов, которые я вижу, касается cocos2d v2.0, или когда я получаю то, что не имеет ошибок, отображаемых в Xcode, оно не применяется к моему классу _drone. То, что я хочу сделать, выглядит примерно так: [_drone setSpriteFrame:[CCSpriteFrame frameWithImageNamed:@"DefectiveDroneSpriteSheet/Drone1.png"]];
Поскольку это устанавливает фрейм для _drone в то, что я хочу. Однако я не знаю, как сделать этот цикл между кадрами.Анимация спрайта в Cocos2D и Spritebuilder
Я нашел ответ на здесь недавно было показано, как это сделать:
NSMutableArray *animationFrames = [NSMutableArray array];
for(int i = 1; i <= FRAMES; ++i)
{
CCSpriteFrame *spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"animationFrame%d.png", i]]; //
}
//Create an animation from the set of frames you created earlier
CCAnimation *animation = [CCAnimation animationWithSpriteFrames: animationFrames delay:delay];
//Create an action with the animation that can then be assigned to a sprite
CCActionAnimate *animationAction = [CCActionAnimate actionWithAnimation:animation];
CCActionRepeatForever *repeatingAnimation = [CCActionRepeatForever actionWithAction:animationAction];
[self runAction:repeatingAnimation];
К сожалению, это не работает для меня, но, может быть, я сделал что-то не так. У меня, похоже, была большая проблема с циклом for/warning, говорящим, что переменная spriteFrame никогда не используется или что-то в этом роде. Проблема с этим кодом заключается в том, что после нескольких часов работы с ним и попытки найти обновленную документацию я не мог понять, как сделать то, что сделал мой первый пример, применить его непосредственно к _drone. Итак, со всем, что сказал ... что я должен сделать для решения этого? Есть ли еще один простой способ, с которым я не обращаю внимания?
Спасибо за ваше время, высоко ценим!
редактировать для Guru:
Здравствуйте, спасибо за реагирование. Это то, что мой цикл for выглядит как сейчас, что бросает мне 4 предупреждения.
for(int i = 1; i <= 2; ++i)
{
CCSpriteFrame *frame1 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"DefectiveDroneSpriteSheet/Drone1.png", i]]; //
CCSpriteFrame *frame2 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"DefectiveDroneSpriteSheet/Drone1.png", i]]; //
}
я получаю предупреждение «неиспользованную переменную для кадра 1 и кадра 2» и «аргумент данных не используется строка формата» для «я». Также, как сделать эту анимацию применимой к моему _drone объекту? Как объект уже помещен в сцену через Spritebuilder?
Второе редактирование:
- (void)didLoadFromCCB {
NSMutableArray *animationFrames = [NSMutableArray array];
for(int i = 1; i <= 2; ++i)
{
CCSpriteFrame *spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"DroneSpriteSheets%d.png", i]]; //
[animationFrames addObject: spriteFrame];
}
//Create an animation from the set of frames you created earlier
CCAnimation *animation = [CCAnimation animationWithSpriteFrames: animationFrames delay:1.0f];
//Create an action with the animation that can then be assigned to a sprite
CCActionAnimate *animationAction = [CCActionAnimate actionWithAnimation:animation];
CCActionRepeatForever *repeatingAnimation = [CCActionRepeatForever actionWithAction:animationAction];
[_drone runAction:repeatingAnimation];
//-----------------------------------------------------------
Вот соответствующая часть моего кода, я получаю эту ошибку:
* Нагрузочное приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина: «* - [__ NSArrayM insertObject: atIndex:]: объект не может быть nil '
Проверьте редактирование, пожалуйста :) – BasedRebel
Две ошибки, одна неправильная рамка спрайта и не добавлены к массиву. Проверьте свой спрайт для правильных имен спрайтов. – Guru
Не знаете, почему я пропустил это, я исправил это и для моего имени spritesheet, это на самом деле называется «DroneSpriteSheets.png». Я проверил его в Xcode, два кадра - Drone1 и Drone2 .png. У меня нет ошибок в xcode, но во втором редактировании вы можете увидеть как мой полный код анимации, так и ошибку, которую бросают. Я не знаю, что может быть причиной этого. – BasedRebel