Селектор расписания cocos2d вне класса - PullRequest
0 голосов
/ 31 мая 2011

Я хочу запланировать интервал @selector (count): 1.0f для подсчета оставшегося времени. вот мой код: (в файле GameManager.m)

-(void) count {
duration++;
[[[GameScene sharedScene] gadgetLayer] updateTimerLabel];
if (timeLimit - duration <= 5 && ticking == NO) {
    ticking = YES;
    [self schedule:@selector(untick) interval:5];
    [[SimpleAudioEngine sharedEngine] playEffect:@"tick.caf"];
}
if (duration >= timeLimit) {
    [self lose];
}
}

gadgetLayer - это место, где я помещаю вещи timerLayer и ScoreLayer. счет не запланирован в GameManager.m, вместо этого я поместил его в свой файл GameScene.m:

-(void) onEnter {
[[GameManager sharedManager] schedule:@selector(count) interval:1.0];
[super onEnter
}


- (void)onExit {
[[GameManager sharedManager] unschedule:@selector(count)];
[super onExit];
}

Но метка таймера не изменится. Метод подсчета находится в файле GameManager.m, должен ли он быть внутри файла GameScene.m? Что-то не так с этим?

+(GameManager*) sharedManager {
if (instanceOfGameManager == nil) {
    return [[GameManager alloc] init];
}
else return instanceOfGameManager;
}


-(id) init {
if ((self = [super init])) {
    instanceOfGameManager = self;

    [self scheduleUpdate];
}
return self;
}`


-(void) update: (ccTime) delta {
    int a = 2;

}

`

Я установил точку останова в строке 'int a = 2', но не может быть достигнут. [GameManager sharedManager] вызывается в методе appDidFinishLaunching, поэтому, я думаю, он не будет распределяться и инициализироваться снова.

1 Ответ

1 голос
/ 31 мая 2011

На самом деле я не знаю почему, но это работает:

-(void) onEnter {
    GameManager *sharedManager = [GameManager sharedManager];
    [[CCScheduler sharedScheduler] scheduleSelector:@selector(count)
                                          forTarget:sharedManager
                                           interval:1.0
                                             paused:NO];

//    [self schedule:@selector(tick:) interval:0.5];
}

Отвечая на следующий вопрос:

Отмена планирования с использованием sharedScheduler работает отлично. Ваша проблема в том, что вы не получаете сенсорные события, потому что вы забыли [super onEnter] (и, кстати, super onExit) в HelloWorld.m, а super onEnter - это место, где CCLayer выполняет самостоятельную регистрацию с помощью touchDispatcher. Если вы добавите это все будет работать.

...