2017-04-10 82 views
3

在游戏更新循环中,将bool标志从false更改为true的最佳方式是什么?例如,如果我在下面有这个简单的例子,如果按住按钮“A”,Input类将Game类的启用布尔值设置为true,如果你释放它,则将其设置为false,并将Game类中的计数器设置为false启用次数从真变为假。例如,如果按“A”并释放两次计数器应该更新为2.在60fps更新Game :: Update()时,计数器将与当前方法错误。为了解决这个问题,我将SetEnable中的检查和计数器移到了Update循环中。在游戏更新循环中计数bool真/假更改

// 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; 
    } 
}