2017-04-10 14 views
3

ゲーム更新ループ内でブールフラグが偽から真に変化した回数を数える最も良い方法は何でしょうか?たとえば、以下のような単純な例がある場合、ボタン "A"を押したままにすると、InputクラスはGameクラスのenable boolをtrueに設定し、それを解放すればfalseに設定し、Gameクラス内のカウンタをカウントします有効にされた回数がtrueからfalseに変更されました。たとえば、 "A"を押して2回離すと2に更新されます。Game :: Update()を60fpsで更新すると、現在の方法ではカウンタが正しくなりません。それを修正するために、チェックループとカウンタをUpdateループの代わりにSetEnableの中に移動しました。ゲームの更新ループ内でブール値の真偽値を変更する

// Input class 

// Waits for input 
void Input::HandleKeyDown() 
{ 
    // Checks if key A is pressed down 
    if (key == KEY_A) 
     game.SetEnable(true); 

} 

void Input::HandleKeyUp() 
{ 
    // Checks if key A is released 
    if (key == KEY_A) 
     game.SetEnable(false); 

} 

// Game class 

void Game::SetEnable(bool enable) 
{ 
    if(enable == enable_) 
     return; 

    enable_ = enable; 

    //Will increment the counter as many times A was pressed 
    if(enable) 
     counter_ += 1; 
} 

void Game::Update() 
{ 
    // Updates with 60fps 
    // Will increment the counter as long as A is pressed 
    /* 
    if(enable_ == true) 
     counter_ += 1; 
    */ 
} 
+1

更新あなたが状態を変えた場合のカウンターを。したがって、KEY_Aが押され、enable_がfalseの場合、trueに変更してカウントします。 –

+1

カウンタは、実際に何回イネーブルを変更したかをカウントしません。 –

+1

問題が明確ではないので、私は言い換えると詳細を追加する必要がありました。私がそれをさらに更新する必要があるかどうかを教えてください。 – sabotage3d

答えて

3
void Game::Update() 
{ 
    if (key == KEY_A && ! enable_) 
    { 
     enable_ = true; 
     ++counter_; 
    } 
    else if (key == KEY_B) 
     enable_ = false; 
} 
+0

新しい編集内容に基づいて回答を更新できますか? – sabotage3d

1

私は右のあなたを取得する場合、あなたは何回enable_変化をカウントします。あなたのコードは、小さな欠陥を持って、この例を想像してみてください。このように、例えば、見ることができるこの問題を解決する可能性がある

enable_ = false 
counter = 0 
update gets called, key is A -> enable_ = true, counter = 1 
update gets called, key is B -> enable_ = false, counter remains 1 

機能:

void Game::Update() { 
    if (key == KEY_A && !enable_) { // key is A and previous state is false 
     ++counter; 
     enable_ = true; 
    } 
    if (key == KEY_B && enable_) { // key is B and previous state is true 
     ++counter; 
     enable_ = false; 
    } 
} 
関連する問題