上一篇文章我介绍了微信6.6.1版本新增的小游戏功能后,这篇文章趁热打铁,介绍一下小游戏的架构。
这篇文章给了三张图,分别从不同的粒度来介绍。
首先是图一:
这张图是最粗粒度的介绍。最底层是我们的移动设备,其上一层是移动端的操作系统,微信运行在操作系统上。当微信第一次在操作系统上安装时,微信的安装文件会告诉操作系统自己需要哪些系统权限。当然,用户可以在安装之后自主决定是否授予微信相应的权限,比如我不希望微信访问麦克风,那么只需勾掉在设置 -- 应用程序 -- 权限设置中关闭掉这个权限即可,如下图所示。选择关掉这个权限即系统不允许微信调用麦克风,那么微信的发语音的功能肯定就没法正常使用了。因此,小游戏的API实现来自于操作系统授予微信的权限的封装。
接下来是第二张图,也是微信这个版本最大的更新,即WeChat Session Manager,这代表着我们可以在保持着小游戏在后台运行的同时,自由地切换到微信聊天界面,这个在我之前的文章里说过,这里就不赘述。假设没有这个功能,那么小游戏和聊天只有选择其一,现在小游戏就像独立的APP一样,可以和微信聊天之间自由切换,微信宛如一个mini操作系统。
图3是最后一张图,根据微信小游戏的官方文档,小游戏的运行环境是一个Javascript的虚拟机,开发者可以用微信官方提供的IDE来开发自己的小游戏,使用的语言是JavaScript,微信官方提供了一套自己的API来供开发者调用,这些API实质是对操作系统API的二次封装。以下是微信官方的解释:
你只能使用 JavaScript 来编写小游戏。小游戏的运行环境是一个 绑定了一些方法的 JavaScript VM。不同于浏览器,这个运行环境没有 BOM 和 DOM API,只有 wx API。
对于一个独立的小游戏项目来说,其本身只需要两个基本文件:
game.js 小游戏入口文件
game.json 配置文件
game.js是项目的入口文件,在编译的时候,编译器会生成相应的gamePage.html
文件,我们从源码可以看到其会引用require("game.js")
。同时,在game.js
中引用的js文件也会在gamePage.html
中被显式地包含:
game.json
是项目的配置文件,主要控制界面渲染和一些运行时属性,具体见下图:当然,因为微信官方还没有提供开放的小游戏发布方式,目前没有官方的流程来让开发者上线自己开发的小游戏。而且在目前的开发环境中,其编译是自动的,不支持任何的项目包导出功能,开发者只能通过官方提供的程序小游戏开发辅助来测试自己的项目。因为小游戏目前没有一个所谓的应用商店来统一对发布进行管理,所以目前没有任何生产系统相关的工具。
从软件工程的角度来说,当开发者开发好自己的项目后,下一步是上线运行。具体到小游戏,我们用JavaScript开发好自己的游戏后,需要编译成一个微信小游戏运行时环境要求的格式,这就像我们在开发好Android APP之后,需要打包成正确有效的apk格式一样。运行时环境会统一处理编译后的源代码,其调用
wx API
的部分,肯定会派发到对应的API Handler去调用移动端操作系统(Android/IOS)提供的API,然后由操作系统来统一调度资源。
总结
小游戏的发布再次表明腾讯是国内最大的游戏公司,也是实力最强劲的游戏公司之一。微信作为一个最重要的流量入口,这次小游戏的发布再次证明其在腾讯战略地位之重要。从技术上来说,小游戏API基本来源于之前开发的小程序的API,小游戏是小程序的一个子类别,不是一个新事物,其核心还是其内部的类浏览器内核,而多任务的支持才是这次的重头戏。最后附上微信V6.6.1的官方宣传语:玩一个小游戏才是正经事。
祝大家玩得开心,生活愉快。