我正在爲我的遊戲編寫服務器,無法弄清楚如何保持移動速度。根據計算機上運行的內容,運動速度要麼非常快,要麼很慢。我已經嘗試爲服務器製作自己的delta方法,但它不起作用。由於服務器使用AWT & Kryonet進行編程,因此我無法在更新中使用Slick delta變量。如何保持服務器的移動速度?
有誰知道如何保持運動?
我正在爲我的遊戲編寫服務器,無法弄清楚如何保持移動速度。根據計算機上運行的內容,運動速度要麼非常快,要麼很慢。我已經嘗試爲服務器製作自己的delta方法,但它不起作用。由於服務器使用AWT & Kryonet進行編程,因此我無法在更新中使用Slick delta變量。如何保持服務器的移動速度?
有誰知道如何保持運動?
您的遊戲服務器需要有一個確定的全球時間。我建議使用System.currentTimeMillis();
那麼您將不得不基於時間基於時間方程移動。由於計算機上的循環不會以準確的速率執行,因此需要使用從前一時間值中減去的System.currentTimeMillis()來獲得增量時間。在運動方程中使用該值來獲得一致的運動。如果你正在計算物理(即運動),你會想要使用Runge Kutta階4階方程,而不是普通的歐拉方程(歐拉計算隨時間推移的誤差)。
其他有用的鏈接:
您有沒有在遊戲中某個時間的概念?也許事件都發生在特定的時間,並且即使你的服務器沒有處理200ms的事件,當事件發生在遊戲「內部」時它也不會改變...... – sarnold
你可以擴展:*「但它不會工作「*? –
客戶端有一個時間的概念,但它不被使用,因爲移動是通過服務器完成的。 我試圖做一個增量更新線程,它更新了增量,但是失敗了,並且總是將增量作爲0返回。 – niccholaspage