habitoti
habitoti

Reputation: 239

Cocos2d (iOS): scheduleOnce called in callback won't fire

I am scheduling a callback via scheduleOnce (Cocos 1.1b), and when the callback is executed and once all tasks were performed there, I try to reschedule the same callback again (just with a different delay). The reasoning is to achieve a varying delay between the callbacks. However, while it is called properly the first time, the second scheduling will never fire it again. Stepping through the Cocos libs, it eventually adds a timer to the list, but it won't fire. Any clue what I am doing wrong and need to do differently?

Edit: just saw this entry in the log on the second scheduling:

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

I tried now to unschedule all timers explicitly first, however it doesn't make a difference. I would anyway expect scheduleOnce to reset that timer on callback.

Upvotes: 1

Views: 1402

Answers (1)

CodeSmile
CodeSmile

Reputation: 64477

It may be a bug in Cocos2D, after all you're using the very latest beta version. So I won't divulge into that, you may want to report this through the official channels however (cocos2d forum, google code issues for cocos2d-iphone).

In the meantime you can simply do this:

-(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()];
}

Alternatively, if you want to re-schedule the selector at a later time, you can unschedule it as follows within the repeat method (the _cmd is shorthand for the selector of the current method):

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

Upvotes: 2

Related Questions