我想安排@selector(计数)间隔: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不会改变。 count方法在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'行中设置断点,但无法到达。 在GameDidFinishLaunching方法中调用[GameManager sharedManager],因此我猜它不会再分配和初始化。
答案 0 :(得分: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进行取消安排非常有效。您的问题是您没有收到触摸事件,因为您忘记了HelloWorld.m中[super onEnter]
(以及super onExit
}的方式,super onEnter
是CCLayer进行自我注册的地方使用touchDispatcher。如果你要添加它,一切都会有效。