国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用Node.js開發多人玩的HTML 5游戲

譯文
開發 前端
《星噬》確實引起了我的興趣,因為它很簡單,但玩法很吸引人,不過明顯缺少支持多人玩的功能。我一下子來了勁,想解決這個問題。于是,osMUs(MU指多人玩)應運而生,這是一款基于瀏覽器的多人玩的《星噬》克隆版游戲。

【51CTO精選譯文】有一天,幾個朋友來我家,給我介紹幾個很酷的iPad游戲。其中一個游戲是《星噬》(Osmos),開發這款游戲的是加拿大一家獨立開發商,名叫Hemisphere Games。你可以控制在二維空間漂浮的一個小小的星團。小星團唯一能做的事就是往某個特定的方向噴射自己,結果往相反的方向推動星團。游戲規則很簡單;主要規則就是,兩個星團碰撞時,大的那個會吞噬掉小的那個。其余規則基本上直接來自質能守恒。

《星噬》確實引起了我的興趣,因為它很簡單,但玩法很吸引人,不過明顯缺少支持多人玩的功能。我一下子來了勁,想解決這個問題。于是,osMUs(MU指多人玩)應運而生,這是一款基于瀏覽器的多人玩的《星噬》克隆版游戲。

工作原理

瀏覽器瀏覽到osmus登錄頁面后,服務器會將宇宙的當前狀態發送給新的客戶端,這個宇宙由多個速度隨機的星團組成。這時候,客戶端可以被動地關注游戲進度;但是當然了,也可以作為玩家控制的星團,加入游戲。一旦玩家加入,他就可以點擊或在移動設備上快速按下畫布(canvas),射出新的星團。

隨著游戲不斷進行,服務器決定某人(可能是其中一個獨立自主的星團)何時獲勝;這時,玩家們接到通知,游戲重新開始。

本文其余部分介紹了與開發有關的一些具體內容。所以,如果你想試一下,盡管試好了。不過要注意一點:osmus在Chrome穩定版(版本13)和iPad上運行。

游戲架構

我編寫osmus,是為了分成不同的、松散耦合的組件,既為了讓其他代碼貢獻者更容易獲得代碼庫,又為了便于嘗試可以互換的技術。

osmus使用一個共享的游戲引擎(Game Engine),該引擎既可以在瀏覽器中運行,又可以在服務器上運行。引擎是一個簡單的狀態機,其主要功能就是使用里面定義的物理規則,計算出與時間有關的下一個游戲狀態。

  1. Game.prototype.computeState = function(delta) {  
  2.   var newState = {};  
  3.   // Compute a bunch of stuff based on this.state  
  4.   return newState;  

這是游戲引擎很狹窄的定義。在游戲開發領域,游戲引擎的含意通常涵蓋渲染器、聲音播放器和網絡層等方面。這種情況下,我在這些組件之間作了非常明確的劃分,osmus游戲的核心僅僅包括物理狀態機,那樣客戶端和服務器都能計算出下一個狀態,因而在時間上做到很合理的同步。

客戶端有三個主要部件組成:渲染器、輸入管理器和聲音管理器。我制作了一個非常簡單的基于畫布的渲染器,將星團畫成紅圓圈,將玩家星團畫成綠圓圈。我的同事Arne Roomann-Kurrik編寫了一個替代的基于three.js的渲染器,使用了一些壯麗的著色器和陰影。

聲音管理器處理回放聲音效果和背景音樂(來自8-bit Magic)的工作。目前實現的方法使用了音頻標簽,有兩個元素,一個用于背景音樂通道,另一個用于聲音效果通道。這個方法存在已知的局限性,但考慮到我實現的方法具有模塊性,聲音實現方法可以換成使用其他API的方法,比如使用Chrome的Web Audio API。

最后,輸入管理器負責處理鼠標事件,但是可以換成改而使用觸摸操作的管理器,用于移動版本。在移動情況下,可能有必要使用CSS3轉換而不是使用畫布,因為CSS3在iOS上是硬件加速的,而HTML5畫布仍然不是,也沒有實現WebGL。

說到移動,我驚喜地發現,osmus在iPad上玩起來很順暢,尤其是在運行最新iOS版本的iPad 2上。這太好了,也是為開放互聯網編寫游戲的其中一個實際好處。

#p#

聯網很難

從聯網的角度來看,游戲是一個相當宏偉龐大的項目,需要客戶端之間實現無縫實時同步。正由于如此,客戶端/服務器的雙向通信必不可少。在現代互聯網架構中,這種通信機制由Web Sockets來提供,它在TCP上提供了薄薄的一層,把許多繁瑣的細節隱藏起來,不讓實現者看到。為進一步隱藏網絡堆棧方面的細節,我使用了socket.io庫,該庫為整個游戲提供了一種異常簡單的事件驅動抽象層。遺憾的是,目前不支持二進制數據,不然可以大大壓縮消息大小——拿《星噬》來說,壓縮后也許可以減少一兩個數量級。

經過一番研究,包括我與知名的HTML5開發專家Rob Hawkes進行的那次深入討論后,清楚地發現:要獲得任何一種共享體驗,最簡單的模式就是在服務器上有真正的游戲狀態,讓客戶端定期與它進行同步。這方面需要取舍的主要是同步質量與所需的網絡流量。

在一個極端情況下,如果游戲邏輯完全在服務器上,以每秒60幀的速度將更新內容(或者可能僅僅是屏幕截圖)發送到客戶端,就可以編寫游戲,但是由于這種模式需要數量龐大的帶寬,所以這個做法一般行不通。在相反的極端情況下,你可以設想這種網絡架構:客戶端連接,獲得初始狀態,然后基本上各自獨立自主。

實際上,有一種很好的折衷方法——許多支持多人玩的游戲采用這種方法,那就意味著復制客戶端和服務器中的重要代碼。幸好,由于我們處在無所不在的JavaScript時代,再也不需要復制功能,而是只要用JavaScript編寫游戲引擎就可以共享代碼,然后在客戶端上的瀏覽器中和服務器上的node.js中運行即可。

共享的JS模塊

如前所述,osmus使用在客戶端與服務器之間共享的物理引擎。因而有人可能會想:在兩者之間共享JavaScript代碼會易如反掌,實際上不是那么容易。

模塊加載器有一大堆。有CommonJS規范、RequireJS庫和node.js require方法,沒有一個可以很好地協同使用。如果你不用模塊加載器,就想在客戶端和服務器之間共享代碼(這是服務器上JS的一大優點),那么你可以使用這個有點變通的模式:

  1. (function(exports) {  
  2.  
  3. var MyClass = function() { /* ... */ };  
  4. var myObject = {};  
  5.  
  6. exports.MyClass = MyClass;  
  7. exports.myObject = MyObject;  
  8.  
  9. })(typeof global === "undefined" ? window : exports); 

這個變通方法靠的是這一點:node.js定義了global(全局)對象,而瀏覽器沒有定義。有了這個變通方法,node.js require()會很高興,你還可以在<script>標簽中加入文件,不會污染你的名稱空間,當然假設沒有其他JS以window.global對象污染你的名稱空間!

遺憾的是,這個方法只適用于一個共享模塊。一旦你有了多個彼此依賴的模塊(通過node-land中的require方法和browser-land中的global對象),節點的名稱空間與瀏覽器的加入之間的差異會變得異常明顯,需要更多的變通方法。

另一個方法是使用browserify,捆綁所有JS,在瀏覽器里面模擬require。這種方法依賴node.js來提供生成的JS,這并不理想,因為靜態文件應該由專門為該用途優化的web服務器來提供。不過,node.js+ browserify可以進行配置,以便編譯可以靜態提供的JS,不必依賴節點來提供。這個方法帶來了一些開銷:

1. 多出了構建這個步驟,以便部署。

2. 無論browserify使用什么機制來支持require()調用,都需要性能開銷。

總的來說,這個方法在我看來比較好,我希望在將來編寫的osmus版本中試用一下。

原文:Developing Multiplayer HTML5 Games with Node.js

【編輯推薦】

  1. 你應該知道的Node.js擴展模塊——Hashish
  2. Node.js提速指南
  3. 關于Node.js語言的討論
  4. Node.js初體驗
  5. 什么是Node.js?
責任編輯:陳貽新 來源: 51CTO
相關推薦

2014-10-30 10:28:55

Node.js

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2021-01-14 10:48:34

Docker CompNode.js開發

2012-09-29 11:13:15

Node.JS前端開發Node.js打包

2020-05-29 15:33:28

Node.js框架JavaScript

2013-08-15 09:14:55

2018-06-11 14:39:57

前端腳手架工具node.js

2018-08-30 16:08:37

Node.js腳手架工具

2011-10-24 16:16:02

Node.js

2022-08-28 16:30:34

Node.jsDocker指令

2023-01-10 14:11:26

2013-11-01 09:34:56

Node.js技術

2022-01-07 08:00:00

Node.js開發Web

2011-11-10 11:08:34

Node.js

2019-05-05 11:47:09

TypeScript開發Node.js

2020-02-25 12:27:59

Node.jsWeb開發前端

2021-12-28 20:04:23

Node.js開發JavaScript

2021-12-25 22:29:57

Node.js 微任務處理事件循環

2012-02-03 09:25:39

Node.js

2021-07-16 04:56:03

NodejsAddon
點贊
收藏

51CTO技術棧公眾號

超碰97人人射妻| 免费黄网站在线观看| 91一区二区三区四区| 在线播放日韩av| 最爽无遮挡行房视频在线| 一区二区三区免费观看| 我要看一级黄色大片| 粉嫩aⅴ一区二区三区四区五区| 好看的日韩精品| 婷婷综合社区| 国产精品精品视频| 精品av导航| 国内成人精品一区| 欧美高清一级片| 久久精品男人天堂| 少妇高潮一区二区三区99| 国产视频精品久久久| 麻豆福利在线观看| 日韩精品在线一区二区| av毛片在线免费看| 91精品在线一区二区| www在线免费观看| 亚洲欧美韩国| 美乳少妇欧美精品| 成人av影视| 成人欧美一区二区三区小说| 成人午夜视频免费在线观看| 高清国产一区二区| 可以在线看的av网站| 成人精品国产一区二区4080| 欧美激情亚洲天堂| 91在线播放网址| 久久视频免费在线| 成人夜色视频网站在线观看| 久久成人免费观看| 国产精品久久久久久久裸模| 国产三级视频| 欧美午夜精品久久久| 国产乱码在线| 中文字幕亚洲欧美一区二区三区| 国产999精品在线观看| 午夜精品国产精品大乳美女| 久久99国内| 国产精品青青草| 免费不卡在线观看| 各处沟厕大尺度偷拍女厕嘘嘘| 国产亚洲自拍一区| 小香蕉视频在线| 欧美大片顶级少妇| 国产成人毛片| 国产精品日韩在线观看| 最新国产拍偷乱拍精品| 午夜久久久久久久久久久| 国产日韩精品一区二区三区| 一级毛片高清视频| 精品美女在线播放| 亚洲午夜剧场| 成人精品视频99在线观看免费| 午夜亚洲一区| 国产l精品国产亚洲区久久| 午夜精品久久久久久久99樱桃| 中文字幕免费高清电视剧网站在线观看 | 日韩精品在线网站| 国产不卡精品在线| 亚洲自拍小视频| 国产精品一区二区黑丝| 四虎成人在线视频| 这里是久久伊人| 国内不卡的一区二区三区中文字幕 | 国产一区欧美日韩| 国产精品久久久久9999小说| 五月开心婷婷久久| 日本黄色免费在线| 热re99久久精品国产66热| 亚洲精品资源| 国产美女三级视频| 欧美精品高清视频| 国产在线视频欧美一区| 国产chinese精品一区二区| 97超碰国产精品| 色av男人的天堂免费在线| 色一情一伦一子一伦一区| 日韩免费影院| 欧日韩在线观看| 噜噜爱69成人精品| 三上悠亚在线资源| 日韩精品高清在线| 视频在线不卡免费观看| 伊人久久在线观看| 在线日韩一区二区| 天堂精品久久久久| 亚洲一区bb| 播放一区二区| 国产区精品在线观看| 成人黄色小视频在线观看| 美女av网站| 中文字幕日韩av电影| 狠狠干成人综合网| 国产一线二线三线在线观看| 日韩一区二区三区视频在线 | 一区二区三区久久| 偷拍精品精品一区二区三区| 91久久偷偷做嫩草影院| 久久久不卡网国产精品一区| 日本动漫理论片在线观看网站 | 国产日韩另类视频一区| 国产美女精品久久久| 自拍偷拍亚洲激情| 午夜无码国产理论在线| 欧美日韩国产精品一区二区| 亚洲午夜久久久久中文字幕久| 亚洲精品观看| 久久www视频| 欧美电影精品一区二区| 五月激情综合| 最色在线观看| 国产精品99久久久久久白浆小说| 久久综合九色综合97_久久久| 无遮挡爽大片在线观看视频| 日韩电影天堂视频一区二区| 在线观看区一区二| 午夜久久黄色| 毛片在线免费| 成人两性免费视频| 亚洲一区二区在线视频| 久久综合五月婷婷| 午夜在线观看av| 久久久久久久国产| 中文字幕的久久| 日韩av资源网| 深夜爽爽视频| 国产欧美一区二区白浆黑人| 亚洲四区在线观看| 国产一区三区在线播放| 一级特黄视频| 91免费精品国偷自产在线| 午夜久久久久久电影| 亚洲精品中文字幕乱码| 最新国产在线观看| 麻豆精品传媒视频| 久久福利综合| 一区二区三区区四区播放视频在线观看| 国产精品va在线| 欧美精品一区三区在线观看| 亚洲黄色免费电影| 日韩美脚连裤袜丝袜在线| 无码内射中文字幕岛国片| 色播久久人人爽人人爽人人片视av| 91国内精品野花午夜精品| 欧美日韩一区二区三区四区不卡| 北条麻妃av高潮尖叫在线观看| 一区二区三区在线播放欧美| 国产不卡视频在线观看| 国产成人77亚洲精品www| 国产亚洲精品网站| 欧美富婆性猛交| 亚洲人一二三区| 五月开心六月丁香综合色啪| 六十路在线观看| 欧美一区二区福利| 亚洲人成欧美中文字幕| 91丨porny丨在线| 久久99久久人婷婷精品综合| 亚洲大胆精品| 欧美激情第一页在线观看| 精品五月天久久| 久久久久久久电影| 国产91精品对白在线播放| 精品乱码一区二区三四区视频| 国产一区二区久久久| 日韩av在线影院| 国产欧美一区视频| 99精品在线观看| 成人午夜在线影视| 亚洲人成无码网站久久99热国产 | www免费在线观看视频| 国产99午夜精品一区二区三区| 精品福利在线导航| 久久久777精品电影网影网 | 69久久夜色精品国产7777| 日本韩国一区二区三区| 久久精品国产一区二区三| 一本一道久久a久久| 国产综合在线观看| a级黄色小视频| 成人a免费视频| 亚洲欧美成人网| 一区二区三区高清| 国产一二区视频| 蜜桃欧美视频| 欧美精品激情视频| 69堂成人精品免费视频| 久久综合成人精品亚洲另类欧美 | 国产成人综合精品| 欧美va亚洲va在线观看蝴蝶网| 久久久国产精华| 亚洲一区自拍| 美女久久久久| 亚洲天堂一区二区| 噜噜噜噜噜在线视频|