c++ - 使用多个变量和 while 循环跟踪播放时间

标签 c++ time while-loop sfml

我想在我的游戏中添加一种模式,其中可以跟踪玩家完成游戏所需的时间。

我目前的解决方案是:我有四个变量(出于各种原因)跟踪时间:

int timerMilliseconds_= 0;
int timerSeconds_ = 0;
int timerMinutes_ = 0;
int timerHours_ = 0;

每当我更新我的游戏时,我都会将 timerMilliseconds_ 增加当前增量时间并更新值。它看起来像这样:

timerMilliseconds_ += dt.asMilliseconds();

if (timerMilliseconds_ >= 1000) {

  while (timerMilliseconds_ >= 1000) {
    timerMilliseconds_ -= 1000;
    timerSeconds_++;
  }

  while (timerSeconds_ >= 60) {
    timerSeconds_ -= 60;
    timerMinutes_++;
  }

  while (timerMinutes_ >= 60) {
    timerMinutes_ -= 60;
    timerHours_++;
  }

}

这段代码似乎可以工作,但对我来说它看起来有点……奇怪……。

这些 while 循环有意义吗?我是不是设计过度了?

我知道这几乎值得进行代码审查,但我想我可以在这里得到更好的答案!谢谢!

最佳答案

计算重复的减法相当于(整数)除法;剩下的就是余数。
所以你可以使用算术:

timerSeconds = timerMilliseconds / 1000;
timerMilliseconds = timerMilliseconds % 1000;
timerMinutes = timerSeconds / 60;
timerSeconds = timerSeconds % 60;
timerHours = timerMinutes / 60;
timerMinutes = timerMinutes % 60;

关于c++ - 使用多个变量和 while 循环跟踪播放时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36547389/

相关文章:

r - R中的谐波级数和函数

php - 使用 MySQL 查询在 PHP 中列出所有社区成员

c++ - 将由空格分隔的文件读入动态数组C++

c++ - SqlDataAdapter 未加载数据表 - C++

c++ - OwnerDraw CButton mfc 焦点

linux - 时钟()的实现

c - 为什么 while 循环中的 scanf 可以工作?

c++ - 全局 new 和 delete 运算符的定义

长时间运行的查询中的 SQL NOW()

c++ - 如何在不中断的情况下同时使用 cin 和 cout?