Cocos2d (iOS): scheduleOnce, вызванный в обратном вызове, не сработает - PullRequest
1 голос
/ 27 ноября 2011

Я планирую обратный вызов через scheduleOnce (Cocos 1.1b), и когда обратный вызов выполняется и после того, как все задачи были выполнены там, я пытаюсь перепланировать тот же обратный вызов снова (только с другой задержкой) ). Причина заключается в достижении различной задержки между обратными вызовами. Однако, хотя он вызывается правильно в первый раз, второе расписание больше никогда не сработает. Проходя по библиотекам Cocos, он в конечном итоге добавляет таймер в список, но не срабатывает. Любая подсказка, что я делаю неправильно и нужно делать по-другому?

Редактировать: только что увидел эту запись в журнале на втором графике:

CCScheduler#scheduleSelector. Selector already scheduled. Updating interval from: 0.00 to 0.00

Теперь я попытался сначала явно отключить все таймеры, однако это не имеет значения. В любом случае я бы ожидал, что scheduleOnce сбросит этот таймер при обратном вызове.

1 Ответ

2 голосов
/ 27 ноября 2011

Это может быть ошибка в Cocos2D, ведь вы используете самую последнюю бета-версию.Так что я не буду раскрывать это, вы можете сообщить об этом через официальные каналы (форум cocos2d, проблемы с кодом Google для cocos2d-iphone).

А пока вы можете просто сделать это:

-(id) init
{
  …
  [self scheduleSelector:@selector(repeat) interval:0];
}

-(void) repeat
{
  // simply schedule the selector again with a new interval
  [self scheduleSelector:@selector(repeat) interval:CCRANDOM_0_1()];
}

В качестве альтернативы, если вы хотите перепланировать селектор на более позднее время, вы можете отменить его планирование следующим образом в методе повторения (_cmd - это сокращение для селектора текущего метода):

-(void) repeat
{
  [self unschedule:_cmd];
  // re-schedule repeat at a later time
}
...