Перезапуск действия в cocos2D для iPhone

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

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

 CCAnimate* action = [CCAnimate actionWithAnimation:myAnimation];

 [mySprite runAction: action];

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

 if( [action isDone] ){

     [mySprite runAction: action];

 }

Но это приводит к катастрофическому отказу. Кто-либо какая-либо идея, что корректный способ сделать это?

1
задан Tiddly 12 August 2010 в 00:13
поделиться

2 ответа

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

  CCAnimate* action = [CCAnimate actionWithAnimation:myAnimation];

  [mySprite runAction: action];

  [action retain];

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

 if( [action isDone] ){

      [mySprite runAction: myAction];

 }
0
ответ дан 2 September 2019 в 22:15
поделиться

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

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

2
ответ дан 2 September 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: