0

我想安排一个 @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];
}

但是 timerLabel 不会改变。计数方法在 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 方法中被调用,所以我猜它不会被再次分配和初始化。

4

1 回答 1

1

其实我不知道为什么,但它工作:

-(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 进行自我注册的地方。如果你要添加这个,一切都会奏效。

于 2011-05-31T06:55:05.067 回答