2010-08-12 2 views
1

Если я использую действие, которое не повторяется в cocos2D, как перезапустить это действие?Перезапуск действия в cocos2D для iPhone

Я использую код:

CCAnimate* action = [CCAnimate actionWithAnimation:myAnimation]; 

[mySprite runAction: action]; 

Действие работает нормально один раз, но при наступлении события, я хочу, чтобы иметь возможность выполнить действие снова, пока она будет закончена, поэтому я попытался с помощью это когда четное срабатывает.

if([action isDone]){ 

    [mySprite runAction: action]; 

} 

Но это приводит к сбою. Кто-нибудь знает, как правильно это сделать?

ответ

0

Оказывается, я просто не сохранить действие и спрайт должен был удалить его, как только это было сделано. Итак, теперь мой код;

CCAnimate* action = [CCAnimate actionWithAnimation:myAnimation]; 

    [mySprite runAction: action]; 

    [action retain]; 

, а затем, когда я хочу, чтобы он снова запускался;

if([action isDone]){ 

     [mySprite runAction: myAction]; 

} 
2

попытаться сохранить действие в переменной экземпляра. В заголовочном файле есть указатель объявлен

CCAction* myAction; 

тогда, когда слой или спрайт инициализируется

myAction = [CCAnimate actionWithAnimation:myAnimation]; 

С какого момента, когда вы хотите вызвать ваши действия сделать

if([action isDone]){ 

[mySprite runAction: myAction]; 

} 

Я думаю, причина, по которой ваше приложение терпит крах, состоит в том, что вы вызываете действие, которое существует только в течение времени, в течение которого он инициализируется.

В моей игре я использую CCSequences (поэтому я могу использовать CCCallFunc для установки/объявления переменных mid анимации), все эти CCSequences сохраняются как переменные экземпляра в моем подклассе CCSprite.

У меня есть простоя анимации, которая повторяется навсегда.

Всякий раз, когда я хочу, чтобы «прыгать», например, я называю

[self stopAllActions]; 
[self runAction:jumpSeq]; 

Моим jumpSeq является CCSequence, который играет прыжок анимацию, и имеет CCCallFunc в конце последовательности, которая перезапускает простой анимации, когда он готово.

Надеюсь, это поможет.

Дальнейшее чтение: http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:actions_special?s[]=cccallfunc

+0

В моем коде я сохраняю действие как переменную класса. Я попытался остановить все действия перед вызовом runaction, но это не имело никакого значения. Я не совсем уверен, как использовать CCCallFunc с тем, как работает мой код. – Tiddly

+0

попробуйте сбросить сохранение]; в конце вашего действия (не забудьте освободить его в вашем методе dealloc) – Bongeh

0

У меня был один и тот же вопрос, который я объявленная CCAction * MyAction в заголовочном файле, но когда я пошел, чтобы вызвать его из другого метода я испытал аварии, но как @Bongeh упоминался при использовании [MyAction сохраняют] он работал отлично

Смежные вопросы