我正在制作一个通用计时器,它具有从 0 向上计数或从某个数字向下计数的功能。我还希望它允许用户增加和减少时间。一切都很容易实现,除了计时器从某个数字开始倒计时,并且用户从中添加或减去时间的情况。
例如:(m_clock 是 SFML 的 Clock 的一个实例)
float Timer::GetElapsedTime() {
if ( m_forward ) {
m_elapsedTime += m_clock.GetElapsedTime() - m_elapsedTime;
} else {
m_elapsedTime -=
m_elapsedTime - m_startingTime + m_clock.GetElapsedTime();
}
return m_elapsedTime;
}
为了更清楚一点,假设计时器从 100 开始倒计时。10 秒后,上面的函数看起来像100 -= 100 - 100 + 10
which equals 90
。如果它在 20 秒后被调用,它看起来就像90 -= 90 - 100 + 30
which equals 70
。
这适用于正常计数,但如果用户调用 AddTime() (只是 m_elapsedTime += arg ),则向后计数的算法会惨遭失败。
我知道我可以使用更多成员并跟踪以前的时间等来做到这一点,但我想知道我是否遗漏了一些非常明显的实现。我希望在单个操作中使其尽可能简单。