попробуйте сохранить действие в переменной экземпляра.В заголовочном файле указатель, объявленный
CCAction* myAction;
, затем, когда слой или спрайт инициализируется
myAction = [CCAnimate actionWithAnimation:myAnimation];
С какого момента, когда вы хотите вызвать свое действие, делайте
if( [action isDone] ){
[mySprite runAction: myAction];
}
Я думаю, что причина сбоя вашего приложения в том, что вы вызываете действие, которое существует только на время метода, в котором оно инициализируется.
Я игра, я использую CCSequence (такя могу использовать CCCallFunc для установки / объявления переменных в середине анимации), все эти CCSequence хранятся как переменные экземпляра в моем подклассе CCSprite.
У меня есть бездействующая анимация, которая повторяется навсегда.
Всякий раз, когда я хочу, например, «прыгнуть», я вызываю
[self stopAllActions];
[self runAction:jumpSeq];
Мой jumpSeq - это CCSequence, который воспроизводитанимация прыжка; в конце последовательности имеется CCCallFunc, который перезапускает анимацию ожидания, когда она завершена.
Надеюсь, это поможет.
Дополнительная информация: http://www.cocos2d -iphone.org / вики / doku.php / prog_guide: actions_special s [] = cccallfunc