HTML5遊戲開發進階 12:多人對戰遊戲操作
使用同步網路模式實現真正的多人對戰遊戲操作框架。我們將研究如何處理網路遊戲中一些典型的難題,比如,傳輸延遲和同步性。為了保證遊戲的同步,我們將使用前幾章設計的sendCommand()方法來保證玩家的命令在兩個瀏覽器上都已執行。我們將在遊戲中使用第10章的觸發器來判斷遊戲的獲勝或失敗。最後,我們將為遊戲實現一個聊天系統。
12.1 同步網路模型
實現多人對戰最重要的一個挑戰是確保所有的玩家是同步的。這意味著遊戲中任何一個變化(比如,玩家命令某個單位進行移動或攻擊)都要傳遞給其他的玩家,使他們也能看到這個變化。
為了保證兩個玩家完全同步,我們將實現所謂的同步網路模型架構。兩個玩家將以相同的遊戲狀態開始。當某個玩家命令單位時,我們將這個命令傳送給伺服器,而不是立刻執行它。伺服器收到後,將同樣的命名傳送給每個線上的玩家,並指定何時執行該命令,玩家接收到命令後,將在指定的時間執行命令,這樣就可以保證遊戲是同步的。
伺服器將執行一個自己的計時器,這個計時器每秒步進10次。當玩家向伺服器傳送命令時,伺服器將記錄接收到命令的時間。接著,伺服器將命令傳送給玩家,並指定執行該命令的時刻。玩家接收到命令後,需要延遲到正確的時刻才執行命令。
需要記住的是,因為伺服器需要確保所有的玩家同時執行命令,所以它要等到所有的玩家都接收到該命令後,才允許計時器進行下一次步進。這就是我們為什麼稱這個架構是同步的。
事實上,網路傳輸時間會造成交流上的延遲,因此,這個過程遠比上面描述的複雜。有時候,訊息從伺服器傳到客戶端需要花費數百毫秒的時間。我們的網路模型需要考慮對傳輸時間進行測量,以確保遊戲進行流暢。
在每個玩家第一次連線到伺服器時,為其測量網路傳輸時間。
測量網路傳輸時間:傳輸時間,即訊息從伺服器傳送到客戶端所用的時間。我們將在伺服器和客戶端間往返傳遞數次訊息,然後計算傳遞一次訊息所用時間的均值。
當瀏覽器收到來自伺服器的latency_ping訊息時,就立刻向伺服器回覆一條latency_pong訊息。
傳送命令:當玩家將下達給單位的命令傳送給伺服器時,我們就將這條命令轉發給所有的玩家,並指定在tickLag時間之後,執行該命令。
12.2 結束多人對戰
有兩種結束方式。第一種是,一個玩家以關卡指定的方式擊敗了另一個玩家,另一種就是一個玩家關閉了瀏覽器或斷開了與伺服器的連線。
12.3 實現玩家聊天
定義一個input元素作為聊天輸入框
相關文章
- HTML5遊戲開發進階 11:WebSocket與多人對戰模式HTML遊戲開發Web模式
- HTML5遊戲開發進階 9:新增武器和戰鬥HTML遊戲開發
- HTML5遊戲開發進階 10:完成單人戰役HTML遊戲開發
- HTML5遊戲開發進階 5 :建立即時戰略遊戲世界HTML遊戲開發
- HTML5遊戲開發進階 6 :加入單位HTML遊戲開發
- HTML5遊戲開發進階 4 :物理引擎整合HTML遊戲開發
- HTML5遊戲開發進階 8 :新增更多的遊戲元素HTML遊戲開發
- HTML5遊戲開發進階 2 :建立基本的遊戲世界HTML遊戲開發
- HTML5遊戲開發進階 3 :物理引擎基礎HTML遊戲開發
- HTML5遊戲開發進階 7 :單位智慧移動HTML遊戲開發
- HTML5遊戲開發進階指南(亞馬遜5星暢銷書,教你用HTML5和JavaScript構建遊戲!)HTML遊戲開發亞馬遜JavaScript
- HTML5 canvas遊戲開發實戰 5 : 石頭剪刀布HTMLCanvas遊戲開發
- HTML5 canvas遊戲開發實戰 6 : 俄羅斯方塊HTMLCanvas遊戲開發
- HTML5 canvas遊戲開發實戰 7 : "是男人就下一百層“遊戲HTMLCanvas遊戲開發
- HTML5移動遊戲開發高階程式設計 2:從玩具到遊戲HTML遊戲開發程式設計
- HTML5移動遊戲開發高階程式設計 3:試飛結束,向移動進發HTML遊戲開發程式設計
- 阿里開源HTML5小遊戲開發框架Hilo實戰教程阿里HTML遊戲開發框架
- 實戰Flash遊戲開發遊戲開發
- HTML5移動遊戲開發高階程式設計 9:自建Quintus引擎(1)HTML遊戲開發程式設計UI
- HTML5移動遊戲開發高階程式設計 10:自建Quintus引擎(2)HTML遊戲開發程式設計UI
- HTML5移動遊戲開發高階程式設計 11:自建Quintus引擎(3)HTML遊戲開發程式設計UI
- 直接操作遊戲物件C#遊戲開發物件C#遊戲開發
- 試玩 GOWOG ,初探 OpenAI(使用 NeuroEvolution 神經進化)與 Golang 多人線上遊戲開發OpenAIGolang遊戲開發
- HTML5 遊戲開發基礎的教程HTML遊戲開發
- HTML5遊戲開發——骰子游戲(一)HTML遊戲開發
- HTML5遊戲開發(四):飛機大戰之顯示場景和元素HTML遊戲開發
- HTML5遊戲開發(五):飛機大戰之讓所有元素動起來HTML遊戲開發
- HTML5 進階系列:web StorageHTMLWeb
- 《HTML5Canvas遊戲開發實戰》——第3章 Canvas高階功能HTMLCanvas遊戲開發
- MySQL 進階實戰MySql
- 《HTML5完美遊戲開發》——2.8資源分享HTML遊戲開發
- 使用 .NET 進行遊戲開發遊戲開發
- 前端開發入門到實戰:HTML5進階FileReader的使用前端HTML
- HTML5進階FileReader的使用HTML
- 遊戲開發經驗談(二):對戰類全球服遊戲的設計與實現遊戲開發
- HTML5遊戲開發過程中的二三事HTML遊戲開發
- 來自 Mozilla 的 HTML5 遊戲開發資源HTML遊戲開發
- 12.22GWB獨立遊戲開發者沙龍遊戲開發