2013-10-09 27 views
0

在我的項目中,我正在運行一列火車,當它到達特定點時停止移動,此移動由glutTimerFunc執行。我再次希望列車從我點擊鼠標到某個特定位置的位置開始。 BUT問題在於, 即使在我到達那個位置後,我的計時器仍然運行,所以即使當我初始化它的起點不工作(它從左邊的位置繼續)。如何在GLUT中停止或暫停glutTimerFunc?

現在我需要停止計時器並啓動新位置的火車計時器。

+0

您是否必須使用glutTimerFunc,或者您可以使用自己的計時器嗎? – fintelia

回答

2

API documentation有以下說:

沒有爲取消註冊的回調的支持。而是在觸發時忽略基於其值參數的回調。

因此,爲您的軟件添加布爾值,並在觸發時忽略該事件。最好使用基於時鐘的計時器而不是事件驅動的計時器,並且每次運行主循環時手動執行定時更新(您檢測自上次更新以來的時間量,並確定是否執行更新計時器(s)),但從長遠來看。這是物理學和其他各種基於時間的模擬如何在大多數專業軟件中處理的方式,使用事件驅動模型會讓您錯過或經常過期地處理定時事件。

1

歡迎來到遊戲引擎和演員的世界。

我的建議是,你不要試圖通過直接打開或關閉glutTimerFunc來做到這一點。計時器功能應該是整個程序的最高級別的「心跳」,它的工作就是告訴每個具有行爲的對象 - 「參與者」 - 它應該自我更新。火車應該有自己的內部狀態,知道它在哪裏以及它是否應該移動。