попытаться сохранить действие в переменной экземпляра. В заголовочном файле есть указатель объявлен
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
В моем коде я сохраняю действие как переменную класса. Я попытался остановить все действия перед вызовом runaction, но это не имело никакого значения. Я не совсем уверен, как использовать CCCallFunc с тем, как работает мой код. – Tiddly
попробуйте сбросить сохранение]; в конце вашего действия (не забудьте освободить его в вашем методе dealloc) – Bongeh