在游戏更新循环中计算布尔的真/假变化
Count bool true/false change inside game update loop
计算布尔标志在游戏更新循环中从 false 更改为 true 的次数的最佳方法是什么?例如,如果我在下面有这个简单的例子,如果您按住按钮"A"按下输入类,则将 Game 类的启用布尔值设置为 true,如果您释放它,则将其设置为 false,并且 Game 类内计算启用次数的计数器从 true 更改为 false。例如,如果您按"A"并释放两次,计数器应更新为 2。让 Game::Update() 以 60fps 的速度更新计数器在当前方法下是错误的。为了修复它,我将检查和计数器移到了 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;
*/
}
void Game::Update()
{
if (key == KEY_A && ! enable_)
{
enable_ = true;
++counter_;
}
else if (key == KEY_B)
enable_ = false;
}
如果我猜对了,你想数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;
}
}
相关文章:
- 一个关于在C++中重载布尔运算符的问题
- 提升精神:解析布尔表达式并简化为规范范式
- C++取消引用指针.为什么会发生变化
- 为什么在读取文件大小时文件IO速度会发生变化
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 线程之间的布尔停止信号
- 布尔比较运算符是如何在C++中工作的
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 隐式常量/非常量运算符布尔
- 为什么cudaMemGetInfo报告设备内存总量的变化
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- 如何在 c++ 中让布尔变量返回为 0 或 1 而不是真或假?
- 重载更少,则运算符返回相反的布尔值
- 将布尔变量添加到 int
- 如何避免LED在循环状态变化中闪烁?
- 在游戏更新循环中计算布尔的真/假变化
- 布尔值在 for 循环中没有变化
- 检测线程内布尔值的变化
- c++布尔变量变化