webGL游戏开发-前篇

本人很懒,文章排版有问题,请勿吐槽。

正文:

webGL这个js API,可以呈现交互式的2D或3D图形。

表现效果一流,支持的浏览器丰富。

目前支持 WebGL 的浏览器有:Firefox4+,Google Chrome9+,Opera12+,Safari5.1+ 和Internet Explorer11+;然而, WebGL一些特性也需要用户的硬件设备支持。

如此犀利的技术,加上刚入游戏行业这个坑,再加上公司用U3D做的东西慢如狗。因此我自己经过一番调查,总结出一个游戏开发思路,望各位指正:

1:后端采用熟悉的技术,本人擅长java(大约做了7-8年),servlet3.0后支持websocket,加上web端的良好支持,各种页游层出不穷,因此选择java左右后台开发的主流技术没有任何问题。基本框架是:

spring-websocket
spring-message
jdk1.8

核心就是这两个支持websocket的spring官方模块,对于websocket的支持非常好,从效率上讲,易上手,花了一天时间做了个websocket的demo。并且实现了发布/订阅的机制。从交互协议上讲,个人感觉不存在多大问题。其中开启了stomp协议之后,不仅实现了订阅消息的机制,而且配合websocket的双工能力,从协议上将已经不会是技术瓶颈。

spring官方出品的sock.js向下降级兼容各大浏览器,数据支持byteArray,json等轻量级数据,因为本身要实现的是棋牌产品,从交互数据的大小上讲算很小的了。退一万步讲,如果真的存在数据包过大,换成protobuf后也能缩小1/3到1/5。这块,不成问题。

数据库方面,根据项目需要,暂定为mysql做数据持久化,项目的特点是持久化的频率不高,结合redis在内存中做业务数据的存储和数据传递,结算后做数据持久化。理论上还是能满足基本需要。

用户认证:

说到用户认证,其实有很多种做法,首先从游戏场景讲:玩家进入游戏肯定是经过认证的用户。不支持陌生用户玩这个游戏,通常会走注册->登录流程。如果采用社交化登录的话。通过扫码登录(微信或者qq等)然后实现用户认证是比较常见的。登录后,后端给前端一个会话token,后面的数据交互,都会带上这个token(包括websocket协议中的数据交互)。redis根据token去做用户信息的key,value就是用户信息,从socketsession中获取到的id,作为第二个用户信息的key,value就是token。这样当用户掉线,重新登录时,可以更新用户的服务器状态。

反向代理

为什么需要反向代理:游戏除了websocket协议,还会涉及到一些外围的模块,还会牵扯到网页的获取,活动的更新等,内容承载肯定通过jetty或者tomcat等web容器来进行返回内容。包括一些rest的api,json的数据交互等。所以上nginx还是有必要的。首先是它解决了http的反向代理,将用户的请求反向代理给web容器。另外一个直接利用nginx做负债均衡。可以很方便快捷的解决除了websocket以外的其他数据交互。其次nginx本身也支持tcp的upstream,所以也可以做到websocket的反向代理,服务如果多机部署,数据见做共享,那么业务数据的压力的就可以直接通过nginx来做分发。从而减轻单击压力。

高可用,本来考虑上HA,但觉得没必要,成本上去了,一切都是卵的。本身和程序设计没有多大必然联系。以后再说。

服务器其他要干的事情,就剩下定义主题和接口,以及数据模型了。服务器的细节问题(并发、会话共享等),以后再讨论。


2:前端选型

先说产品的目标运行环境:

PC端:覆盖一些上了年纪的用户,下载安装,就像qq一样方便。
移动端:其实不想做移动端的。
H5:主要针对支持webGL的主流浏览器,其实大部分都支持,除了该死的IE(IE10说:什么仇,什么怨)。

从优先级来讲,是PC > H5 > APP

从前端的技术选型来讲,必须覆盖所有。

调查并且跑了一些demo之后,发现whs.js和three.js是不错的选择。whs.js也是three.js的上层封装。结合node.js完全能够做到前端的技术盲点覆盖。

选型如下:

whs.js/three.js选其一,我选whs.js
socket.io-client/reconnecting-websocket选其一。后者支持掉线重连的封装。
stompjs 结合node.js的net模块,实现overWS的websocket参数封装,一步完成消息订阅。
zepto.js 不说了,主要是轻量级,主要针对外围交互json数据多。
tween.js 动画库,备用。
es6-promise 这个不赘述咯,语法写起来就像JDK1.8一样,各种lambda写起来感觉爽。

项目架构方面:采用webpack来做构建,结合一些插件可以做很多事情。

桌面应用程序打包层面,采用electron来做打包,因此项目会集成进去,打包后会生成linux、macOS和windows的运行程序,(跨平台?),不过我只需要win32的就够了,谁TM跑linux上去玩。

项目编译后,会生成一个bundle.js的全局压缩js,全部打包到应用程序中,用户打开程序后,不会像H5打开程序一样慢悠悠的,其速度取决于用户的电脑性能和加载js运营环境(引擎等东西)的效率。总的来讲,速度非常的快。游戏体验,绝对可以媲美原生(不要小看webGL的能力)。

electron打包后其实项目可以运行了,只不过就是个白板项目,出来也有100来M,吓人,用nsis压缩打包成exe可执行文件,压缩后,几十M,放到网上供用户下载。桌面应用程序的打包过程就了结了。

H5发布:直接制作一个分支,抛开electron,剩下的无异,本身程序就是基于web开发的,但是体验上肯定不如打包后的桌面应用程序和app,资源等所有东西都要从服务器下载。

APP打包层面:没具体深入了解,不过程序在制作上肯定会针对app但是做一套页面的适配,因为游戏毕竟不像web的响应式设计那样可以适配到所有设备。但是前端的交互逻辑以及js业务层面的封装是可以复用的,所以,产生的额外工作就只剩下UI适配。

APP打包工具选择:

1. 最好的选择是,安卓和IOS都需要各自的程序员来完成,毕竟app的体验与其他的不同,拿登录来讲,如果要用微信登录,那至少要唤起微信的客户端来做授权回调,所以还是需要原生能力。

2.退而求其次,现在Hbuilder的云端打包可以支持,类似的其他平台如api cloud好像也支持。就目前调查的结果来看,还是Hbuilder配合第三方可能会比较容易一些。暂定!

PS:你要是吊得一比,你就用react-native搞啊!

app打包最麻烦的在于发布后需要先去申请一些相关平台的key和密钥。这样第三方登录才可以使用。所以,这玩意儿优先级肯定是放到最后的。

不过我会优先做一个demo出来,验证以上思路的可行性。

下一章讲项目的构建。

感谢您的阅读。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容