在游戏更新循环中计算bool标志从false变为true的最佳方式是什么?例如,如果我在下面有这个简单的例子,那么如果按住按钮" A"按下Input类将Game类的enable bool设置为true,如果你释放它,则将其设置为false,Game类中的计数器计算enable的次数从true变为false。例如,如果按" A"并且释放两次计数器应该更新为2.当Game :: Update()以60fps更新时,计数器将是当前方法的错误。为了解决这个问题,我将检查和计数器移到了SetEnable而不是Update循环中。
// 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;
*/
}
答案 0 :(得分:3)
void Game::Update()
{
if (key == KEY_A && ! enable_)
{
enable_ = true;
++counter_;
}
else if (key == KEY_B)
enable_ = false;
}
答案 1 :(得分:1)
如果我找到了你,你想要计算启用更改的次数。你的代码有一个小缺陷,想象一下这个例子:
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;
}
}