2012-04-12 15 views
-5

我正在編寫一個2D遊戲引擎,遇到了我以前從未見過的東西。我有一個布爾函數來初始化所有圖形相關的東西。我的主要功能非常簡單:C++在運行時跳過函數調用

// Main engine loop 
int main(int argc, char *argv[]) 
{ 
    const int TICKS_PER_SECOND = 60; 
    const int SKIP_TICKS = 1000/TICKS_PER_SECOND; 
    const int MAX_FRAMESKIP = 10; 

    double next_game_tick = timer.getTime(); 

    int loops; 

    // Initialize everything 
    if(!init) 
    { 
     return 1; 
      errorLog.writeError("Could not initialize engine components!"); 
    } 

    // While the user hasn't quit 
    while(quit == false) 
    { 
     loops = 0; 
     while(timer.getTime() > next_game_tick && loops < MAX_FRAMESKIP) 
     { 
      update(); 

      next_game_tick += SKIP_TICKS; 
      loops++; 
     } 

     render(); 

    } 

    cleanup(); 

    return 0; 
} 

奇怪的部分是它只是跳過整個像。沒有返回,沒有錯誤輸出,並且我已經將調試消息放在bool函數中,它們也不會輸出。它只是完全跳過該功能。

我試圖在.CPP文件的頂部聲明這兩個函數。主要功能在文件的底部。

有沒有其他人經歷過這種情況,它只是跳過一個函數的整個調用?

謝謝!

+6

「*我有一個布爾函數初始化所有相關設備的圖形。*」這是哪裏?如果它恰好被稱爲'init',那麼你錯過了一些括號...... – ildjarn 2012-04-12 21:08:58

+1

跳過了什麼功能?你有沒有試過在調試器中運行來判斷你的布爾條件是否被滿足? – birryree 2012-04-12 21:09:03

+1

跳過什麼? – ScarletAmaranth 2012-04-12 21:09:34

回答

6

你的問題沒有提供什麼功能被跳過,但讀取你的代碼,我看到什麼似乎是一個錯誤,可能是你所描述的。

// Initialize everything 
    if(!init) 
    { 
     return 1; 
     errorLog.writeError("Could not initialize engine components!"); 
    } 

如果init函數不存在,此行將返回錯誤。由於init函數可能存在,它不會返回錯誤。此外,在main返回後,將不會執行其他代碼。我假設你的意思實際上是調用的init函數,並且在退出之前記錄錯誤

// Initialize everything 
    if(!init()) //parenthesis to call it 
    { 
     errorLog.writeError("Could not initialize engine components!"); 
     return 1; 
    } 

無關:你的主循環將使用CPU的很多。它看起來像它會update一次,然後(根據update需要多長時間),呼叫update永遠永遠沒有盡頭(忽略quit變量),或render遍地儘可能快地就可以了,直到SKIP_TICKS時間的推移,在這指出它重複該過程,或者直到quit被設置。您可能想要重新考慮該邏輯,也許使用sleep函數。

while(quit == false) { //maybe like this 
    loops = 0; 
    update(); 
    if (timer.getTime() > next_game_tick) { 
     render(); 
     next_game_tick = timer.getTime() + 10; //100 fps max 
    } 
} 
+0

如果渲染將與V-Blank同步,他可能不需要「睡眠」。我寫的遊戲只會在最小化時調用「睡眠」。 – IronMensan 2012-04-12 21:24:48

+0

也有可能他希望它儘快更新。我無法弄清楚他的意圖,但許多GUI使用'睡眠',所以我提到了它。 – 2012-04-12 21:26:09

1

那麼,那些線,這可以解釋爲什麼什麼也沒有發生:

if(!init) 
    { 
     return 1; 
     errorLog.writeError("Could not initialize engine components!"); 
    } 

init設定是否正確?

此外,在返回函數後打印某些內容沒有任何意義。