预期')'之前';'令牌错误?

时间:2011-03-25 14:29:10

标签: iphone token

我正在创建一个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都是.... 请帮我! 非常感谢

4 个答案:

答案 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