我正在用令人驚歎的phaser.io開發一個非常簡單的HTML5遊戲。這場比賽非常簡單:2D版的1vs1排球比賽...實際上它是偉大的「皮卡丘排球」(http://imagenes.es.sftcdn.net/es/scrn/12000/12531/pikachu-volleyball-2.jpg)的「複製品」。多人遊戲 - 同步球
正如我所說的,這場比賽是很容易的,我有:
- PLAYER1
- Player2
- 靜態元素
- 球
而且我剛剛來控制: - 球員運動 - 球運動(實際上由街機物理控制) - 玩家 - 球碰撞
我只是爲了好玩,把我的朋友的面孔添加到玩家。 這款遊戲工作得很好,我和朋友一起玩,真的很開心。所以我想,爲什麼不讓它在線多人遊戲,所以我們可以從不同的位置遠程玩?
閱讀了關於多人遊戲的HTML5遊戲之後,我開始用帶有nodeJS服務器的websocket(socket.io)開發它。 socket.io的實現非常簡單,通訊工作正常。
事情是讓遊戲真正可玩。
這些都是我的步驟現在:
在客戶端連接,則創建:
- PLAYER1(我自己)
- 靜態元素
而且客戶端等待新客戶連接創建:
- 遠程播放器
- 球
因此,兩個客戶端連接後,每個客戶端上,我有:
- OwnPlayer
- RemotePlayer
- 靜態元素
- 球
然後遊戲開始......在這個階段它不是很公平,因爲遠程玩家根本沒有移動。所以,爲了讓遠程播放器移動(在一些嘗試之後),我決定實施一種權威的服務器,就像那樣工作。
- 本地球員動作(輸入註冊) - >客戶端發送的輸入到服務器 - >服務器發送輸入到兩個客戶端 - >每個客戶端應用運動(通過改變速度)
這技工使球員的運動在過去工作,但'同步'(等待時間是可以接受的)。
這看起來不錯,每個客戶端都在播放他們的播放器,另一個播放器正在遠程客戶端移動。
問題是球...
在每個客戶端有一個球,與街機物理移動(在網或在每個玩家的頭彈跳)......所以很少有動作後,因爲球員位置的同步並不完美,每個客戶球的位置也不一樣。
你將如何實現球同步?
有些選項我在想:
定期送球位置服務器 - >服務器發送的球位的客戶端 - >客戶端更新球位置(有一些插值)
僅在一個客戶機(主站)和然後啓用球物理髮送從「主客戶端」球位置「從屬客戶」週期性地(與的WebRTC,也許)
重新開始和製作一個真正的「權威服務器」,在服務器上安裝Arcade Physics(如果可能的話),並在客戶端插值?