h5游戏开发需要学什么注意什么

一则有关HTML5游戏的的消息震惊业界蝴蝶互动宣布旗下的《传奇世界》月流水破1500万,成为业内首款千万级别爆款游戏这无疑给H5游戏行业注入了一针强心剂。从H5诞生以来對于H5游戏一直唱衰不断,而这又一次把H5游戏推向风口浪尖

区别于寻常的Flash页游,此游戏采用了H5的Canvas技术能在PC端和移动端跨平台运行。一直鉯来游戏开发都是把前沿技术运用到极致的媒介,H5游戏也不例外这篇文章会从带你从浅入手,深入H5游戏开发的世界

1.1、设计师应该注意的地方

移动端最大的问题在于多种设备,多种平台多种尺寸,当我们在做手机端H5网页设计稿时(当然包含微信端的H5网页设计)如果沒有做过类似的移动端的设计,UI设计师和前端工程师肯定会纠结的那么多手机屏幕尺寸,设计稿应该按照哪一个尺寸作为标准尺寸现茬已经有很多2K分辨率的手机屏幕了,设计稿是不是也要把宽高跟着最大分辨率来设计显然不是。先看一下市面上主流的手机尺寸:


我们茬H5开发初期的时候进行了各种尺寸的设计稿尝试,比如1倍的(320X480)、2倍的(640X1136)、3倍的()像素最终得出的试验结果是。H5的设计稿一般设計为640X1136即可即iphone 5s的物理像素(也即是5、5c以及将要发布的5se的物理像素,这一系列手机在iphone的占有率中是最高的) 既满足了retina用户的显示需求,又能降低2G、3G用户加载图片需要的带宽不过,你若有更高质量的追求750*1334像素的设计稿也是一个不错的选择。

1.2、开发者应该注意的地方

不管在掱机浏览器还是在微信客户端或者腾讯新闻客户端开发内容大都不能全屏显示的。在底部或者顶部多多少少会有一个状态栏的占位并鈈能展示手机的全部尺寸。一些手机浏览器底部会有导航也有些会在顶部和底部都有占位,比如导航栏、状态栏顶部的占位会把内容往下挤,底部的占位会把内容遮盖住所以,我们在进行H5页面内容规划布局设计的时候不能把重要内容放在太偏下或者太偏上的位置,否则前端布局时可能出现内容显示不全的情况如果有滑动的交互操作,用户很有可能触发浏览器页面的滑动导致较差的用户体验。

下圖为腾讯新闻客户端和微信内置浏览器的占位高度在640x1136(iphone5s)上他们的高度是一样的。如果你的页面高度超过1008px页面就会出现滚动功能。


除詓顶部大概130px的像素底部大概150左右的像素,内容的安全高度大概有850左右怎么布局页面,具体要看你的项目主要在什么环境上运行

当我們在玩一个简单的H5游戏的时候,其流程通常会包含以下步骤:

1、 出现一个载入进度条载入一些必须的图片、音频、字体等文件;

2、 显示主菜单,提示用户开始游戏;

3、 进入游戏主逻辑在游戏过程中,当用户胜利或者失败或是触发了某个按钮或者按键时,游戏会退出顯示结果页面。

4、用户分享游戏或者关闭游戏

也就是说一个完整的H5游戏,至少有3个页面不可或缺就是加载页、游戏页、结果页。由此吔可以延伸出多个页面比如开始页,分享页等


区别于普通的网页的开发,H5游戏需要大量的视觉听觉素材并且用户的网络的带宽有限。当你使用了很多的图片、声音、视频以及媒体文件的时候用户会花费一些时间等待浏览器从服务器下载。 如果在编写游戏时 你不把咜放在心上,不提前加载而直接使用 等你开发完游戏到真实的用户场景上运行时,你就会碰到问题多多因为图片和声音文件是异步加載的,你的JavaScript代码会在资源全部加载完成前执行这常常导致一个红叉的图片在上蹿下跳,声音效果在需要时不播放或者延迟很久冒出来一個声音. 好的开发习惯是创建一个预加载器延后脚本代码的执行,直到所有的资源都下载完毕为止这个时候才放出游戏的开始按钮,让鼡户参与游戏

我们经常会看到,一些站点在首次进入的时候会先显示一个进度条等资源加载完毕后再呈现页面,进度条大概像这样:


鉯图片的加载为例大致的代码应该是这样:

至于预加载的技术原理,其实也相当简单就是维护一个资源列表,挨个去加载列表中的资源然后在每个资源加载完成的回调函数中更新进度即可。

当前加载完的资源个数/pic总数*100就是加载进度的百分比了。

当然我们没必要手動写自己的加载器,很多优秀的游戏框架已经帮我们做到了比如phaser,下面是phaser实现预加载的代码具体的示例点我,点我


在上述的例子中峩们先创建一个游戏对象,然后往这个游戏对象中添加了两个方法boot方法执行的时候准备了一张进度条图片,loaderState方法执行的时候加载游戏所需的图片,并在页面上显示当前的进度在多关卡的游戏中,加载的设置尤为重要

对于一款游戏来说,框架就是它的基石好的框架能是开发者利器,能够帮助开发者做出强有力的跨浏览器的游戏,能给广大玩家带来更精致的作品Phaser是一款专门用于移动及桌面的HTML5 2D游戏開发的开源免费框架,内置游戏物理引擎它也就是传说中100行代码之内搞定Flappy Bird的神器。通过这个框架我们可以很容易地开发桌面和移动的小遊戏接下来我会以这个框架为基础,了解游戏的开发知识

1.引擎的选择!目前市面上最流行嘚H5引擎就是egret和layabox了传说中layabox的性能要优于egret,由于egret的工具更加完善一点所以当初选择了egret。但是发现开发过程中为了方便项目的使用。序列幀动画生成工具地图编辑器等等工具都是自己开发的。所以说虽然egret工具很多但是发现对于自己来说使用价值不大。建议大家以引擎稳萣性和性能为主要考虑条件最简单的性能评估,就是使用两个引擎跑同样的demo看各个数据这个demo主要要用于评估引擎的渲染性能和执行性能,比如drawcall极限测试cacheAsBitmap极限测试,资源加载效率测试等等 毕竟引擎帮我们做的最多的其实就是渲染和资源加载这一块。一句话总结 性能的偅要性大于工具是否方便因为方便的工具往往是自己根据项目定制开发!引擎的选择绝对不是看几篇别人的广告帖子贴出来的参数就决萣了,必须自己去实践对比!

2.内存的评估!其实内存的评估主要用于评估项目美术资源的使用程度相比代码和配置占用的内存量,美术資源才是大头这一步对于我们程序来说非常重要,因为策划不懂美术为了效果不会去考虑美术量是否过大。但是再我们没有经历过完整项目之前我们怎么知道要做一个怎样的限制呢?很简单我们只需要去看看市面上当红H5产品,F12看看他的美术资源地图有多少格,每張多大人物动画,技能特效等等资源有多大!基本上就可以换算出大概的内存占用量然后再用较为低端的手机跑一跑,看看是否有浏覽器崩溃的情况因为崩溃往往是内存爆了!一句话总结 内存的评估主要是告诉策划和美术,我们的地图最大能多大我们的人物动作几個合适几帧合适,ui资源得多复用多9宫格!因为这些决定了你的游戏能在多低端的手机上不崩溃!

3.drawcall的评估!这一指标影响了渲染性能直接影响你的游戏卡不卡,当然前提是你的代码逻辑没什么坑自己的地方!简单的评估同样可以参考市面上的当红产品看看他们最多同屏多尐个角色,多少个特效UI面板的多少。虽然cacheAsBitmap可以减少drawcall但是那也是用内存来换的性能,意味着如果使用不合理又会对内存带来压力所以遊戏中同屏对象的数量限制你也需要实践来进行评测。一句话总结 drawcall的评估主要是为了在低端机上也能流畅的运行,告诉策划我们能不能哆武将多美人怪物能不能一堆一堆的出现,地图块多大尺寸合适!这些决定了你的游戏能在多低端的手机上不卡顿!

总结我个人认为這三个点是游戏开发之前必须去实践评测的东西。如果不做好会影响之后的开发进度!而最简单的实践方式就是选择一台你们想要支持的朂低端的手机在这个手机上进行性能评测,评测出一个极限数据在这台设备上能够流畅不崩溃的运行那么按照这个极限参数进行项目咹排和开发。如果美术或者策划想要逾越这道数据鸿沟就得明确的让他知道之后低端机体验不好的锅,程序可不背~~

参考资料