2011-03-25 176 views
1

我正在創建一個Iphone應用程序,它由NSTimer每六十分之一秒調用一次 - (void)gameLoop。這裏是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

您在這裏提交的代碼有不平衡的花括號。無論是因爲你的代碼不平衡還是因爲部分複製粘貼,我們都無法辨別。當然,你在這裏提出的是一個語法錯誤。 – 2011-03-25 14:42:29

回答

1

你可能有一個不平衡的括號某處以上- (void)gameLoop,也許你在.h文件中遺漏了從方法聲明- (void)gameLoop;分號(但我認爲這會給你一個不同的錯誤信息)。

0

你得(的NSTimer *)aTimer添加到您的函數簽名是這樣的:

-(void)gameLoop :(NSTimer *) aTimer 

,並在[NSTimer scheduleWithTimeInterval...選擇你要添加一個分號:

@selector(gameLoop:) 

至於你的功能:

你最後一條if語句中的這條線是什麼?爲什麼你需要括號?

(paratrooperTimer = 0); 

也許這是編譯器錯誤

2

這不是你的問題是什麼的原因,但你提的問題紅旗我,我以前碰到,你會可能會欣賞一些預先警告。

NSTimer在事件循環結束時觸發。它不是一個節拍器 - 當它被調用時它會被調用,而且它可能不是常規的。阻止應用程序的漫長過程將會阻止NSTimer按時被觸發。另外NSTimer的最大分辨率爲50-100ms(每個文檔)。所以在最好的情況下,它會每秒發射20次,而你試圖要求它的分辨率高出三倍。

對於分辨率較低的東西,NSTimer非常好,但爲了儘可能快地達到您想要的效果,它可能根本不起作用。但是,你真的需要60幀/秒嗎?

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

相關問題