最近想利用空余时间学习一下游戏开发方面的知识。对于一个从没有接触过游戏开发的小白,连到底有哪些游戏开发框架或者引擎都不是很清楚,只知道名气最大的unity3D,还有比较古老的cocos2dx。但是unity3D似乎更适合于专业团队,开发大型游戏使用。我的想法是自己弄一点小游戏玩玩,所以unity3D的学习成本,对我而言可能比较高,意义不大。cocos2dx总感觉过于古老似的。后来在网上多方搜索,最后发现cocos creator和phaser是两种比较热门的游戏框架。cocos creator是国内中文的,所以第一印象挺好的,毕竟英文水平太渣了。phaser看起来也很不错,在github上星星特别多,它的官网也很有特色,然而是全英文的。但是星星那么多,肯定是相当不错的开源游戏框架了。然而最终在真正尝试了用cocos creator来入门游戏开发后,最终还是赶紧卸载了creator,投身phaser,硬啃英文算啦。


那么为什么最后还是放弃了creator呢。我一开始非常充满激情的下载了creator的开发环境,并且在开发环境中安装了最新版的cocos开发框架。本来想找几个开源的cocos creator小游戏作为学习参考,然而发现cocos的版本兼容性很差,特别是从creator2到3的大版本改版后,以前的项目是很难兼容了。那算了呗,我就自己新建一个项目开始做。然而开发环境的操作体验实在是感觉很差,也有一些bug。比如场景的拖拽和视角,都不那么顺手。还有比如有些input框,修改数值之后可以实时触发预览,然而只有第一次修改能触发实时预览,后续的修改就变得无效,举例比如摄像机高度本来为1000,在input框中删除一位,变成100,那么预览界面可以实时更新为摄像机高度为100的场景,我想再删除一位,变成10时,开发环境的实时预览就不会更新了。这时候要点击其他对象组件,使得当前选定的对象失去焦点,然后再次点击失去焦点的组件,这时候实时预览才能更新到摄像机高度为10时候的预览场景。前面说的只是体验感不好的一小部分。总之感觉易用性真的一般般,而且性能较差。在折腾了两三天cocos creator之后,实在是忍不住了,直接卸载了。也说不出来啥感觉,就是感觉用起来挺憋屈。

所以又开始想尝试phaser了。虽然是全英文,但是看在星星那么多的份上,就试一下呗。phaser的官网界面挺有特色的,而且教程简单而具体,分分钟就按照教程鼓捣出了一个能够动弹的游戏画面了。从phaser的开发方式上来讲,与搞前端开发特别相似,因为它所有的代码都是放到html中的,通过指定html中的某个元素比如div来容器,然后通过在html的script标签中写javascript代码,就能开发游戏了。就相当于一个html页面而已,并且也很容易与其他前端框架或者库来整合使用。开发过程和写前端页面的体验感实在是很相似,并且是原汁原味纯纯的javascript或者typescript风格。没有像cocos creator中一些没见过的注释等。phaser的官网的例子也是相当丰富,官方的用意就是想让开发者能够借鉴模仿各种实例的代码,学习成本减小了很多很多。

不过phaser也是有一点坑的,比如phaser2和phaser3版本的更改实在是太大了。特别多的内容都不同,官网只有2版本的api文档,3版本的api文档要从github中浏览或者下载。国内访问github或者这些国外网站的速度实在是大家都懂的,而且还时不时就无法访问了,这也是一个很大的阻碍。为了方便所以干脆把phaser3的api文档下载到本地学习了。
相比于2,3的实例还是要少一些的,但是也够用了。但是国内关于phaser这个框架的博文或者资料,实在是太少了,百度上几乎啥也搜不到。所以看在phaser写代码很舒服的份上,就只能自己研究实例和api文档了。

玩了几天phaser3,做了一个小游戏,在这个过程中学会了好多其他的概念,比如tiled和texture pack这类概念和软件。phaser这个框架做网页小游戏还是挺好的,代码修改热加载也非常的快速,因为phaser使用js开发,植入到html中,使用的是canvas或者webgl来显示画面,因此在浏览器中效率是很不错的。下面是这几天写的小游戏的两个画面。这是一个迷宫类型的游戏,在规定时间内将迷宫里的萝卜都找到,然后走到出口即可获胜。目前只开发了四张不同难度的地图。



反正phaser3用起来还比较舒服。只可惜phaser的中文资料真少,phaser2的资料稍微多一些,phaser3版本的中文资源少得可怜。所以后续学习过程中会分享一些自己的心得体会与理解。