我正在创建一个Iphone应用程序,它的工作方式是每六十秒钟调用一次 - (void)gameLoop的NSTimer。这是gameLoop
-(void)gameLoop {
paratrooperTimer += 1;
if (gameState == KGameStateBegin) {
BtnStart.hidden = 0;
BtnResume.hidden = 1;
BtnPause.hidden = 1;
}
else if (gameState == KGameStateRunning) {
BtnStart.hidden = 1;
BtnPause.hidden = 0;
[self playGameLoop];
}
else if (gameState == KGameStatePaused) {
BtnResume.hidden = 0;
BtnPause.hidden = 1;
}
else if (gameState == KGameStateGameOver) {
[self endGame];
}
else if (paratrooperTimer == 120) {
(paratrooperTimer = 0);
[self spawnParatrooper];
}
}
我在''之前得到错误“预期')'令牌“在每个if语句和ParatrooperTimer + = 1行中。
GameState是和Integer,所有KGameState都是.... 请帮我! 非常感谢
答案 0 :(得分:2)
这不是你的问题所在,但你已经为我提出了一个红旗,我之前遇到过这个问题,你可能会对此事先发出警告。
NSTimer在事件循环结束时触发。它不是一个节拍器 - 它被调用时被调用,它可能根本不是常规的。阻止应用程序的长进程将阻止NSTimer按时触发。此外,NSTimer的最大分辨率为50-100毫秒(根据文档)。所以在最好的情况下,它会每秒发射20次,而你试图要求它的分辨率比它高出三倍。
对于分辨率较低的东西,NSTimer很棒,但是要按照你想要的速度脉冲,它可能根本不起作用。但是,你真的需要60帧/秒吗?
答案 1 :(得分:1)
您可能在- (void)gameLoop
之上的某个位置有一个不平衡的括号,或者您可能在.h文件中省略了方法声明- (void)gameLoop;
的分号(但我认为这会给您一个不同的错误消息)
答案 2 :(得分:0)
您必须将(NSTimer *)aTimer添加到您的函数签名中,如下所示:
-(void)gameLoop :(NSTimer *) aTimer
并在[NSTimer scheduleWithTimeInterval...
的选择器中添加分号:
@selector(gameLoop:)
至于你的功能:
你最后的if语句中的这一行是什么,为什么你需要括号?
(paratrooperTimer = 0);
可能这是编译器错误的原因
答案 3 :(得分:0)
我怀疑是括号错字或无效的计时器签名。
计时器示例:
self.timer = [NSTimer scheduledTimerWithTimeInterval:60.0
target:self
selector:@selector(timerHandler:)
userInfo:nil
repeats:YES];
其中timerHandler
定义为:
- (void)updateTimeView:(id)inTimer;
无论如何,为什么不使用switch-case
声明?有很多if
它可以帮助维护代码的可读性,因此可以更容易,更快地找到括号错字。
Switch-case explanation