2014-02-21 1 views
0

в проекте, над которым я работаю, у меня есть несколько персонажей, на которые вы можете играть (в этом случае я буду называть их беспилотными). В моих играх у меня есть все настройки физики через _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 '

ответ

0

Вы не добавляете фреймы в массив:

for(int i = 1; i <= FRAMES; ++i) 
{ 
    CCSpriteFrame *spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"animationFrame%d.png", i]]; // 
    [animationFrames addObject: spriteFrame]; 

} 
+0

Проверьте редактирование, пожалуйста :) – BasedRebel

+0

Две ошибки, одна неправильная рамка спрайта и не добавлены к массиву. Проверьте свой спрайт для правильных имен спрайтов. – Guru

+0

Не знаете, почему я пропустил это, я исправил это и для моего имени spritesheet, это на самом деле называется «DroneSpriteSheets.png». Я проверил его в Xcode, два кадра - Drone1 и Drone2 .png. У меня нет ошибок в xcode, но во втором редактировании вы можете увидеть как мой полный код анимации, так и ошибку, которую бросают. Я не знаю, что может быть причиной этого. – BasedRebel