2012-04-12 16 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; 
} 

奇妙な部分は、その全体のようにスキップしています。戻り値なし、エラー出力なし、デバッグメッセージをブール関数に入れましたが、どちらも出力されません。その機能を完全にスキップします。

私は両方の関数を.CPPファイルの先頭に宣言しようとしました。主な機能はファイルの一番下にあります。

他の誰かが、関数呼び出し全体をスキップするだけでこれを体験したことがありますか?

ありがとうございます!

+6

である必要があり、それがどこにあるの? 'init'と呼ばれることがあると、カッコがいくつか欠落しています... – ildjarn

+1

どの機能をスキップしますか?ブール条件が満たされているかどうかを確認するためにデバッガで実行しようとしましたか? – birryree

+1

正確に何かをスキップしますか? – ScarletAmaranth

答えて

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と同期する場合、彼は 'Sleep'を必要としないかもしれません。私が書いたゲームは、最小化されたときにのみ「スリープ」を呼び出すでしょう。 – IronMensan

+0

可能な限り速く更新することも可能です。私は彼の意思を確かめることはできませんが、多くのGUIは「スリープ」を使用するので、私はそれを言いました。 –

1

何も起こらない理由ラインについては、それが何を説明するだろう:

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

が正しく設定initですか?

また、関数を返した後に何かを印刷することは意味がありません。

0

initは、「私は物事を関連するすべてのグラフィックスを初期化するためのブール関数を持っている*。*」init()

歓声

関連する問題