Skip to content

Commit f637111

Browse files
committed
Merge pull request #958 from AT2014/v3.1
Added alternative reschedule:interval method to CCNode class.
2 parents 8f4d8c1 + bc53002 commit f637111

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

cocos2d/CCNode.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,17 @@ A common user pattern in building a Cocos2d game is to subclass CCNode, add it t
552552
*
553553
* @return A newly initialized CCTimer object.
554554
*/
555+
556+
/**
557+
* Schedules a custom selector with an interval time in seconds.
558+
* If the custom selector you pass in is not already scheduled, this method simply schedules it for the first time.
559+
* The difference between this method and the schedule:interval: method is that if the selector passed in this method is already scheduled, calling this method will only adjust the interval on the already scheduled method. In contrast, when you call schedule:interval: on an already scheduled selector, your custom selector will be unscheduled and then rescheduled.
560+
* @param selector Selector to execute.
561+
* @param interval Interval between execution in seconds.
562+
*/
563+
-(CCTimer*)reschedule:(SEL)selector interval:(CCTime)interval;
564+
565+
555566
- (CCTimer *) scheduleOnce:(SEL) selector delay:(CCTime) delay;
556567

557568
/**

cocos2d/CCNode.m

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,6 +1230,32 @@ -(CCTimer *) schedule:(SEL)selector interval:(CCTime)interval
12301230
return [self schedule:selector interval:interval repeat:CCTimerRepeatForever delay:interval];
12311231
}
12321232

1233+
-(CCTimer*)reschedule:(SEL)selector interval:(CCTime)interval
1234+
{
1235+
NSString *selectorName = NSStringFromSelector(selector);
1236+
1237+
CCTimer *currentTimerForSelector = nil;
1238+
1239+
for (CCTimer *timer in [_scheduler timersForTarget:self])
1240+
{
1241+
if([selectorName isEqual:timer.userData])
1242+
{
1243+
CCLOG(@"%@ was already scheduled on %@. Updating interval from %f to %f",NSStringFromSelector(selector),self,timer.repeatInterval,interval);
1244+
timer.repeatInterval = interval;
1245+
currentTimerForSelector = timer;
1246+
break;
1247+
}
1248+
}
1249+
1250+
if (currentTimerForSelector == nil)
1251+
{
1252+
CCLOG(@"%@ was never scheduled. Scheduling for the first time.",selectorName);
1253+
currentTimerForSelector = [self schedule:selector interval:interval];
1254+
}
1255+
1256+
return currentTimerForSelector;
1257+
}
1258+
12331259
-(BOOL)unschedule_private:(SEL)selector
12341260
{
12351261
NSString *selectorName = NSStringFromSelector(selector);

0 commit comments

Comments
 (0)