我正在製作一個通用計時器,它具有從0開始向上計數或從某個數減少的功能。我也希望它允許用戶添加和減去時間。除了定時器從某個數字減少的情況以及用戶增加或減少時間的情況之外,一切都很容易實現。可以按時添加的倒計時器的算法
例如:(m_clock是SFML時鐘的一個實例)
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
,它等於90
。如果它在20秒後被調用,它將看起來像90 -= 90 - 100 + 30
,其等於70
。
這適用於正常計數,但是如果用戶調用添加時間()(只是m_elapsedTime + = ARG),則算法倒數悲慘的失敗了。
我知道我可以使用更多的會員和跟蹤以前的時間,等等。這樣做,但我不知道我是否錯過了一些實現,是非常明顯的。我希望在單一操作中儘可能保持簡單。
Gah。和我一樣的答案:-( – Yuliy 2010-04-04 23:46:03
好吧,我的目標是不必使用另一個成員的功能。如果是這樣的話,那麼你的第一個塊將無法工作,因爲直接添加時間到m_elapsedTime將需要該函數使用+ =和 - =但是,如果要創建一個單獨的成員是唯一的選擇,那就是我將去 – Person 2010-04-04 23:49:38
這不是一個額外的成員你擺脫m_elapsedTime,並在m_addedTime加入 – Yuliy 2010-04-05 00:19:17