webGL游戲開發(fā)-前篇

本人很懶牧牢,文章排版有問題纸兔,請勿吐槽疮蹦。

正文:

webGL這個js API诸迟,可以呈現(xiàn)交互式的2D或3D圖形。

表現(xiàn)效果一流愕乎,支持的瀏覽器豐富亮蒋。

目前支持 WebGL 的瀏覽器有:Firefox4+,Google Chrome9+,Opera12+,Safari5.1+ 和Internet Explorer11+;然而, WebGL一些特性也需要用戶的硬件設備支持妆毕。

如此犀利的技術,加上剛?cè)胗螒蛐袠I(yè)這個坑贮尖,再加上公司用U3D做的東西慢如狗笛粘。因此我自己經(jīng)過一番調(diào)查,總結(jié)出一個游戲開發(fā)思路湿硝,望各位指正:

1:后端采用熟悉的技術薪前,本人擅長java(大約做了7-8年),servlet3.0后支持websocket关斜,加上web端的良好支持示括,各種頁游層出不窮,因此選擇java左右后臺開發(fā)的主流技術沒有任何問題痢畜《庀ィ基本框架是:

spring-websocket
spring-message
jdk1.8

核心就是這兩個支持websocket的spring官方模塊,對于websocket的支持非常好丁稀,從效率上講吼拥,易上手,花了一天時間做了個websocket的demo线衫。并且實現(xiàn)了發(fā)布/訂閱的機制凿可。從交互協(xié)議上講,個人感覺不存在多大問題授账。其中開啟了stomp協(xié)議之后枯跑,不僅實現(xiàn)了訂閱消息的機制惨驶,而且配合websocket的雙工能力,從協(xié)議上將已經(jīng)不會是技術瓶頸敛助。

spring官方出品的sock.js向下降級兼容各大瀏覽器粗卜,數(shù)據(jù)支持byteArray,json等輕量級數(shù)據(jù),因為本身要實現(xiàn)的是棋牌產(chǎn)品辜腺,從交互數(shù)據(jù)的大小上講算很小的了休建。退一萬步講,如果真的存在數(shù)據(jù)包過大评疗,換成protobuf后也能縮小1/3到1/5测砂。這塊,不成問題百匆。

數(shù)據(jù)庫方面砌些,根據(jù)項目需要,暫定為mysql做數(shù)據(jù)持久化加匈,項目的特點是持久化的頻率不高存璃,結(jié)合redis在內(nèi)存中做業(yè)務數(shù)據(jù)的存儲和數(shù)據(jù)傳遞,結(jié)算后做數(shù)據(jù)持久化雕拼。理論上還是能滿足基本需要纵东。

用戶認證:

說到用戶認證,其實有很多種做法啥寇,首先從游戲場景講:玩家進入游戲肯定是經(jīng)過認證的用戶偎球。不支持陌生用戶玩這個游戲,通常會走注冊->登錄流程辑甜。如果采用社交化登錄的話衰絮。通過掃碼登錄(微信或者qq等)然后實現(xiàn)用戶認證是比較常見的。登錄后磷醋,后端給前端一個會話token猫牡,后面的數(shù)據(jù)交互,都會帶上這個token(包括websocket協(xié)議中的數(shù)據(jù)交互)邓线。redis根據(jù)token去做用戶信息的key淌友,value就是用戶信息,從socketsession中獲取到的id褂痰,作為第二個用戶信息的key亩进,value就是token。這樣當用戶掉線缩歪,重新登錄時归薛,可以更新用戶的服務器狀態(tài)。

反向代理

為什么需要反向代理:游戲除了websocket協(xié)議,還會涉及到一些外圍的模塊主籍,還會牽扯到網(wǎng)頁的獲取习贫,活動的更新等,內(nèi)容承載肯定通過jetty或者tomcat等web容器來進行返回內(nèi)容千元。包括一些rest的api苫昌,json的數(shù)據(jù)交互等。所以上nginx還是有必要的幸海。首先是它解決了http的反向代理祟身,將用戶的請求反向代理給web容器。另外一個直接利用nginx做負債均衡物独⊥嗔颍可以很方便快捷的解決除了websocket以外的其他數(shù)據(jù)交互。其次nginx本身也支持tcp的upstream挡篓,所以也可以做到websocket的反向代理婉陷,服務如果多機部署,數(shù)據(jù)見做共享官研,那么業(yè)務數(shù)據(jù)的壓力的就可以直接通過nginx來做分發(fā)秽澳。從而減輕單擊壓力。

高可用戏羽,本來考慮上HA担神,但覺得沒必要始花,成本上去了杏瞻,一切都是卵的。本身和程序設計沒有多大必然聯(lián)系衙荐。以后再說浮创。

服務器其他要干的事情忧吟,就剩下定義主題和接口,以及數(shù)據(jù)模型了斩披。服務器的細節(jié)問題(并發(fā)溜族、會話共享等),以后再討論垦沉。


2:前端選型

先說產(chǎn)品的目標運行環(huán)境:

PC端:覆蓋一些上了年紀的用戶煌抒,下載安裝,就像qq一樣方便厕倍。
移動端:其實不想做移動端的寡壮。
H5:主要針對支持webGL的主流瀏覽器,其實大部分都支持,除了該死的IE(IE10說:什么仇况既,什么怨)这溅。

從優(yōu)先級來講,是PC > H5 > APP

從前端的技術選型來講棒仍,必須覆蓋所有悲靴。

調(diào)查并且跑了一些demo之后,發(fā)現(xiàn)whs.js和three.js是不錯的選擇莫其。whs.js也是three.js的上層封裝癞尚。結(jié)合node.js完全能夠做到前端的技術盲點覆蓋。

選型如下:

whs.js/three.js選其一乱陡,我選whs.js
socket.io-client/reconnecting-websocket選其一浇揩。后者支持掉線重連的封裝。
stompjs 結(jié)合node.js的net模塊蛋褥,實現(xiàn)overWS的websocket參數(shù)封裝临燃,一步完成消息訂閱。
zepto.js 不說了烙心,主要是輕量級膜廊,主要針對外圍交互json數(shù)據(jù)多。
tween.js 動畫庫淫茵,備用爪瓜。
es6-promise 這個不贅述咯,語法寫起來就像JDK1.8一樣匙瘪,各種lambda寫起來感覺爽铆铆。

項目架構方面:采用webpack來做構建,結(jié)合一些插件可以做很多事情丹喻。

桌面應用程序打包層面薄货,采用electron來做打包,因此項目會集成進去碍论,打包后會生成linux谅猾、macOS和windows的運行程序,(跨平臺鳍悠?)税娜,不過我只需要win32的就夠了,誰TM跑linux上去玩藏研。

項目編譯后敬矩,會生成一個bundle.js的全局壓縮js,全部打包到應用程序中蠢挡,用戶打開程序后弧岳,不會像H5打開程序一樣慢悠悠的凳忙,其速度取決于用戶的電腦性能和加載js運營環(huán)境(引擎等東西)的效率∷跎福總的來講消略,速度非常的快。游戲體驗瞎抛,絕對可以媲美原生(不要小看webGL的能力)艺演。

electron打包后其實項目可以運行了,只不過就是個白板項目桐臊,出來也有100來M胎撤,嚇人,用nsis壓縮打包成exe可執(zhí)行文件断凶,壓縮后伤提,幾十M,放到網(wǎng)上供用戶下載认烁。桌面應用程序的打包過程就了結(jié)了肿男。

H5發(fā)布:直接制作一個分支,拋開electron却嗡,剩下的無異舶沛,本身程序就是基于web開發(fā)的,但是體驗上肯定不如打包后的桌面應用程序和app窗价,資源等所有東西都要從服務器下載如庭。

APP打包層面:沒具體深入了解,不過程序在制作上肯定會針對app但是做一套頁面的適配撼港,因為游戲畢竟不像web的響應式設計那樣可以適配到所有設備坪它。但是前端的交互邏輯以及js業(yè)務層面的封裝是可以復用的,所以帝牡,產(chǎn)生的額外工作就只剩下UI適配往毡。

APP打包工具選擇:

1. 最好的選擇是,安卓和IOS都需要各自的程序員來完成靶溜,畢竟app的體驗與其他的不同卖擅,拿登錄來講,如果要用微信登錄墨技,那至少要喚起微信的客戶端來做授權回調(diào),所以還是需要原生能力挎狸。

2.退而求其次扣汪,現(xiàn)在Hbuilder的云端打包可以支持,類似的其他平臺如api cloud好像也支持锨匆。就目前調(diào)查的結(jié)果來看崭别,還是Hbuilder配合第三方可能會比較容易一些冬筒。暫定!

PS:你要是吊得一比茅主,你就用react-native搞拔杼怠!

app打包最麻煩的在于發(fā)布后需要先去申請一些相關平臺的key和密鑰诀姚。這樣第三方登錄才可以使用响牛。所以,這玩意兒優(yōu)先級肯定是放到最后的赫段。

不過我會優(yōu)先做一個demo出來呀打,驗證以上思路的可行性。

下一章講項目的構建糯笙。

感謝您的閱讀贬丛。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市给涕,隨后出現(xiàn)的幾起案子豺憔,更是在濱河造成了極大的恐慌,老刑警劉巖够庙,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恭应,死亡現(xiàn)場離奇詭異,居然都是意外死亡首启,警方通過查閱死者的電腦和手機暮屡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毅桃,“玉大人褒纲,你說我怎么就攤上這事≡糠桑” “怎么了莺掠?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長读宙。 經(jīng)常有香客問我彻秆,道長,這世上最難降的妖魔是什么结闸? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任唇兑,我火速辦了婚禮,結(jié)果婚禮上桦锄,老公的妹妹穿的比我還像新娘扎附。我一直安慰自己,他們只是感情好结耀,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布留夜。 她就那樣靜靜地躺著匙铡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碍粥。 梳的紋絲不亂的頭發(fā)上鳖眼,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音嚼摩,去河邊找鬼钦讳。 笑死,一個胖子當著我的面吹牛低斋,可吹牛的內(nèi)容都是我干的蜂厅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼膊畴,長吁一口氣:“原來是場噩夢啊……” “哼掘猿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起唇跨,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤稠通,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后买猖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體改橘,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年玉控,在試婚紗的時候發(fā)現(xiàn)自己被綠了飞主。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡高诺,死狀恐怖碌识,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虱而,我是刑警寧澤筏餐,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站牡拇,受9級特大地震影響魁瞪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惠呼,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一导俘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剔蹋,春花似錦旅薄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至律想,卻和暖如春猎莲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背技即。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工著洼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人而叼。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓身笤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親葵陵。 傳聞我的和親對象是個殘疾皇子液荸,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,506評論 25 707
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,674評論 0 15
  • 今天是八月十五,中國傳統(tǒng)的團圓節(jié)脱篙,中秋節(jié)娇钱。今天上午我給兒子說,上午寫會作業(yè)绊困,下午去姥姥家文搂。兒子很高興地答應...
    筠惠子昊爸爸閱讀 180評論 0 0
  • 1、童年中秋印象 絕塵遠去的光陰 帶得走風塵 帶不走回憶 一個團圓的日子 思緒策馬 將它追回 佳節(jié)的蓓蕾 攀緣在童...
    天河奔驍閱讀 320評論 2 6
  • 巨牛逼
    我不是小鬼閱讀 142評論 0 0