2012-05-29 30 views
4

我正在爲我的遊戲編寫服務器,無法弄清楚如何保持移動速度。根據計算機上運行的內容,運動速度要麼非常快,要麼很慢。我已經嘗試爲服務器製作自己的delta方法,但它不起作用。由於服務器使用AWT & Kryonet進行編程,因此我無法在更新中使用Slick delta變量。如何保持服務器的移動速度?

有誰知道如何保持運動?

+1

您有沒有在遊戲中某個時間的概念?也許事件都發生在特定的時間,並且即使你的服務器沒有處理200ms的事件,當事件發生在遊戲「內部」時它也不會改變...... – sarnold

+3

你可以擴展:*「但它不會工作「*? –

+0

客戶端有一個時間的概念,但它不被使用,因爲移動是通過服務器完成的。 我試圖做一個增量更新線程,它更新了增量,但是失敗了,並且總是將增量作爲0返回。 – niccholaspage

回答

4

您的遊戲服務器需要有一個確定的全球時間。我建議使用System.currentTimeMillis();

那麼您將不得不基於時間基於時間方程移動。由於計算機上的循環不會以準確的速率執行,因此需要使用從前一時間值中減去的System.currentTimeMillis()來獲得增量時間。在運動方程中使用該值來獲得一致的運動。如果你正在計算物理(即運動),你會想要使用Runge Kutta階4階方程,而不是普通的歐拉方程(歐拉計算隨時間推移的誤差)。

其他有用的鏈接:

http://gafferongames.com/game-physics/integration-basics/

https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Protocol_Design_and_Optimization