在游戏更新循环中计算bool true / false更改

时间:2017-04-10 20:46:20

标签: c++

在游戏更新循环中计算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;
    */
}

2 个答案:

答案 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;
    }
}