You may modify CCDirector on the next way:
Add CCNode* variable to CCDirector, set its property isRunning to YES, and visit it onEach tick in [CCDirector mainLoop].
CCDirector.h
@interface CCDirector : NSObject
{
...
CCNode *alwaysRunning;
}
@property (retain) CCNode *alwaysRunning;
CCDirector.m
@synthesize alwaysRunning;
- (id) init{
...
alwaysRunning = [[CCNode alloc] init];
alwaysRunning.isRunning = YES;
}
- (void) mainLoop{
...
[alwaysRunning visit];
}
Now, when you want to run timer you may use next code:
CCSequence *sequenceAction = [CCSequence actions:
[CCDelayTime actionWithDuration:0.5],
[CCCallFunc actionWithTarget:self selector:@selector(methodCallTimerExpired)],
nil];
[[CCDirector sharedDirector].alwaysRunning runAction:sequenceAction];
or run action for any node which must be add to [CCDirector sharedDirector].alwaysRunning:
CCNode *tempNode = [[CCNode alloc] init];
[[CCDirector sharedDirector].alwaysRunning addChild:tempNode];
[tempNode runAction:sequenceAction];