2012-04-12 48 views
7

我正在製作一個小遊戲,它使用node.js作爲服務器,併爲HTML5畫布嵌入了一個用於客戶端的.js文件。每個球員都有和他們可以用箭頭鍵移動的物體。有關更新我的node.js遊戲的問題

現在我已經提出了2種不同的更新遊戲方式,一種是每當遊戲發生變化時發送新的玩家位置。它工作但我的服務器必須每秒處理大約60個x/y對(客戶端的更新速率爲30 /秒,並且有2個球員不停地移動)。 第二種方法是隻發送玩家對象的新位置和速度/方向,當他們改變其方向速度時,基本上在其他客戶端上,玩家的運動是使用上次更新的方向/速度進行插值的。我的服務器只需要處理很少的x/y7speed/direction數據包,但是當數據包到達時,我的客戶端經歷了一點延遲,因爲插入位置通常距離寫入數據包的實際位置有點遠。

現在我的問題是:你會推薦哪種方法?我應該如何對兩種方法進行滯後補償?

回答

3

如果您的等待時間較短,則從對象繪製新位置的位置進行插值。在低延遲情況下,這並沒有太大區別。

如果您有高延遲,可以實施一種EPIC。 http://www.mindcontrol.org/~hplus/epic/

您還可以檢查它是如何在Browser-Quest中完成的。 https://github.com/mozilla/BrowserQuest

祝你好運!

+0

這篇文章似乎是解決問題的一個很好的起點,但我仍然沒有從解決方案中理解一件事:)) – mihai 2012-04-12 16:42:27

+0

@mihai如果您瞭解C++,那麼EPIC庫的來源很明確。只有兩個帶註釋的文件(Extrapolator.h和Extrapolator.cpp) 如果你不熟練使用C++,我可以做一些工作來解釋它或者實現它。 – rromeroar 2012-04-12 17:03:45

+0

沒關係。我沒有看到源代碼,只是閱讀你指出的文章。該算法的描述很短,我無法理解它,但我相信這是有道理的。 – mihai 2012-04-12 17:18:55