Как проверить, работает ли CCAction - cocos2d - PullRequest
2 голосов
/ 23 ноября 2010

Я использую Cocos2d для написания игры для iPhone.Вот проблема.

У меня есть CCSprite и CCAction, который запускается на нем.

CCSprite texture;
CCAction anim_action;

«Anim_action» - это действие CCRepeatForever.Теперь я хочу проверить, работает ли эта анимация.

Сначала я, хотя и могу использовать функцию [isDone], но думаю, что она не работает с действиями CCRepatForever (я не уверен - этот вариант основанв моих тестах)

Итак, как проверить, запущена ли эта анимация на моей "текстуре"?

Может быть, есть способ получить имя действия, которое выполняется на текстуре в данный момент?Это может быть также полезно!

Ответы [ 4 ]

2 голосов
/ 22 декабря 2012

Есть способ проверить, выполняется ли определенное действие на вашей текстуре.Используйте:

CCAction *action = [texture getActionByTag:kAsignedActionTag];

, где kAsignedActionTag - тег, назначенный вашей анимации.

anim_action.tag = kAsignedActionTag;

Если ваше действие все еще выполняется, getActionByTag метод не вернет ноль.

1 голос
/ 13 января 2011

Вы можете легко использовать [isDone] при применении эффекта

- (void)shakeThatThingOn: (BOOL)on { //you can return BOOL and get if the animation is working or not
 if (on == YES){
  id shaky2 = [CCShaky3D actionWithRange:3 shakeZ:NO grid:ccg(15,10) duration:5];
  if (![shaky2 isDone])
   [self runAction:[CCSequence actions:shaky2,[CCStopGrid action],nil]];

 }
 else {//this else is being called when you turn off animation (it's just 0.2s continuation after turning off - for better visual effect.

  [self stopAllActions];
  id shaky2 = [CCShaky3D actionWithRange:3 shakeZ:NO grid:ccg(15,10) duration:0.2];
  [self runAction:[CCSequence actions:shaky2,[CCStopGrid action],nil]];
 }}

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

1 голос
/ 27 ноября 2012

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

if ([texture numberOfRunningActions] > 0) //animation is running

или

if ([texture numberOfRunningActions] > someNumber) //if you had other actions running
1 голос
/ 23 ноября 2010

Я не верю, что есть способ напрямую определить, завершено ли действие CCRepeatForever, поскольку isDone не имеет смысла, но есть некоторые методы, которые вы можете использовать для обеспечения обратного вызова, чтобы указать, что что-то все еще выполняется:

  1. Переопределить метод step: и вызвать что-то, что проверяет интервал - когда он превышает пороговое значение, вы можете предположить завершение ...с CCSequence.Первым действием последовательности будет ваше повторное действие, а вторым будет CCCalFunc, снова указывающее, что действие все еще выполняется
  2. Подкласс CCRepeatForever и переопределение dealloc, так что вы можете запустить обратный вызов, когда действиеубит и освобожден
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...