为什么要自己写html5游戏引擎?
1)js语法比较简单,很多高级的语法特性都没有,不适合直接开发大型项目。
Js核心语法只用了一周就设计好了,非常仓促。在设计之初,主要是为了给页面写一些“表单验证”之类的小功能。它是基于对象的语言,但是没有提供extend、mix-in、import等语法,因为js之父从来没有想到js有一天会变得如此重要。在web2.0时代,有大量的DHTML需求,因此更大的js框架将解决“大型项目的可维护性”问题,扩展js语言,通过封装api模拟高级语法特性,如YUI3和Dojo。
Extend和mix-in是更好的解决方案,尤其是js模块化。Js本身不提供导入和打包机制,所以聪明的工程师自己封装相关API,近两年形成了commonJS规范。模块化、动态加载和依赖处理非常重要。不解决这个问题,就很难优雅地处理大型项目。
Html5游戏,首先得是大型js项目。Web site这些年积累了很多这方面的经验,html5游戏开发者应该吸收这些经验,不要在web2.0之前写js代码。
2)html5是web前端技术,具有web的特殊性。
比如跨域问题,http优化,BOM相关接口。这些都是传统前端开发的知识,我敢说超过一半的游戏开发工程师都不知道JSONP是干什么用的。比如原生ajax和cookie的接口就很难用,总是需要封装,包括1)中提到的语法扩展,这和web开发有关,但和游戏没有直接关系。Html5游戏引擎不方便处理这些。这些内容可以交给传统的前端框架。
3)canvas和DOM,不同的GUI例程。
这是一个巨大的差距。前端非常熟悉的三个基础元素html+css+js,传统游戏开发工程师却很陌生。尤其是神器css,传统游戏工程师非常排斥。他们知道这个东西很好,但是他们对学习不感兴趣。他们害怕浏览器的兼容性。他们声称开发html5游戏,但实际上他们只敢使用与canvas相关的一个子集。目前大部分html5游戏引擎都是基于canvas,纯canvas。
其实css是一个巨大的神器,在GUI编程中性价比极高。css的api如此简单却惊人的强大!在桌面端,有很多软件都是用c++做一个盒子,里面放一个html,所有的GUI都是用html+css+js实现的。移动终端phonegap也采用了同样的思路。
纯canvas虽然省去了css、dom和浏览器兼容性的学习成本,但却主动放弃了css和dom引擎提供的大量帮助。捡芝麻丢西瓜。
4)大量不同终端和平台的适配。
适合html5的终端包括PC、移动设备甚至平板电视。操作系统有windows、ios、android、win8等主流平台,也有黑莓、web os、chrome os、ubuntu touch、firefox os甚至Wii U等非主流平台,不同的操作系统,不同的分辨率,不同的物理尺寸。如何选择游戏的大小?是自由放任的缩放还是响应式的设计?浏览器可以全屏吗?浏览器状态栏有多高?是从主屏幕(ios设备)打开的吗?是横屏还是竖屏?
除了以上操作系统,还有人人网、微博、微信等平台,也是可以发布html5游戏的地方。这些地方接入的游戏大小有什么要求和限制?我可以改变页面的视窗吗?还是要缩放游戏的根节点?
除了游戏的大小,还有输入设备的适应。pc的输入设备是键盘和鼠标,移动设备的输入设备是触摸屏和重力感应。什么设备用虚拟十字键,什么设备键盘操作都会做,我们还需要嗅出当前的终端。
适应问题是一个巨大的问题。终端只有很多,而且很可能是不断变化的。系统会升级或者有新的设备出来,适配工作要不断更新。游戏引擎考虑过这些吗?深思熟虑,你能满足我的定制需求吗?发动机更新频繁及时吗?