幻蓝博客 – 孤月蓝风

追寻互联网科技、Unity开发、AR/VR开发、游戏开发、Web前后端开发等技术。

幻蓝博客 – 孤月蓝风幻蓝博客 – 孤月蓝风

微信小游戏开发笔记:基本了解及引擎选择

做任何开发,最重要的起点就是:通读官方文档!

该系列文章是开发微信小游戏时遇到问题的总结,是笔记,非教程。如有BUG,请指正。

Adpter

小游戏的运行环境在 iOS 上是 JavaScriptCore,在 Android 上是 V8,都是没有 BOM 和 DOM 的运行环境,没有全局的 document 和 window 对象。因此当你希望使用 DOM API 来创建 Canvas 和 Image 等元素的时候,会引发错误。

在微信小游戏里面,如果使用第三方库,Adapter是一个非常重要的东西。微信在文档中也有提供源码,可以自行进行修改。尝试下来,基本每款引擎都需要进行适配,包括尝试的一个物理引擎Ammo.js,里面使用了print,所以也需要适配。目前唯一遇到的不需要适配的库就是Oimo.js这个物理引擎了。

适配工作也比较简单,很多时候都是一些不需要写太多代码的修改。例如 XMLHttpRequestaddEventListener 方法,只需要加入如下代码就可以了:

{
    key: 'addEventListener',
    value: function addEventListener(name, callback) {
        this['on' + name] = callback;
    }
},
{
    key: 'removeEventListener',
    value: function removeEventListener(name) {
        this['on' + name] = null;
    }
}

全局对象 GameGlobal

在微信小游戏里,因为没有BOMDOM,所以是没有window的,但Adpater中模拟了window。微信自己提供了一个 GameGlobal 全局对象,需要放入全局的东西都可以加到这个里面。

其他不同

微信实现了自己的音频播放、文件系统、Worker。

引擎选择

2D

做2D游戏其实没有太大的问题,白鹭EgretLayaAir(LayaBox)、Cocos都可以,我尝试过Phaser3版本,发现需要改的地方有点多,就没再尝试了。国内2D引擎已经对微信小游戏做了适配,都有自己的Adapter,基本不会遇到太多问题。

在开放域中使用LayaAir制作UI时,发现了一个坑,发布微信小游戏时,LayaAir不会编译代码,而是直接使用已编译的进行生成项目代码,这个问题之前一直没有注意过。

3D,最终选择:Three.js

3D游戏引擎(框架)也有很多,除国内的LayaAirEgret,国外的有 Three.jsBabylon.jsBabylon.js可以用Unity导出场景,很是方便,物理引擎也很方便的可以使用,在电脑和安卓下调试通过,但iOS下似乎shader有问题,所以没有继续研究。

Three.js是现在最火的3D框架之一,跳一跳也是使用这款引擎开发的,而且搭配物理引擎也比较方便,虽然不像Babylon.js导出就能用,但代码量也不多。

之前3D项目使用LayaAir开发,但后来发现竟然没有内置3D物理引擎,而且与其他物理引擎结合困难,就更换了Three.js

3D物理引擎,最终选择:Oimo.js

3D物理引擎有尝试三款,Ammo.jsCannon.jsOimo.js 。最开始使用 Ammo.js 进行测试,使用的 Physijs 插件,代码写完后能够正常运行,但2个box的物理就已经卡到15帧了。

由于 Cannon.js 2年没更新,而且没有找到可用文档,所以也没使用。

Oimo.js 是在下载 Babylon.js时看到的,使用后发现效果很不错,100个盒子没有使用worker也能保持60帧,而且不需要修改任何代码直接可用,所以最终选择了这款物理引擎。

其他

做微信小游戏开发很重要的一点是,要知道哪些东西在微信小游戏里面可用,哪些不可用。

本文是全系列中第1 / 1篇:微信小游戏开发笔记

  • 微信小游戏开发笔记:基本了解及引擎选择

文章导航