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