原作者邹伟,腾讯高级工程师。 现主要负责微信游戏业务后台系统的架构设计和研发管理。
下面主要选取了关于引擎选型、设备/环境适配、微信登录、缓存、开放数据域、分享、支付、性能、版本更新机制、运维等10个部分的文章向您介绍相关知识的小游戏开发。 更多详情请阅读原文。
从发展的角度来看,小游戏是一个基于Canvas/WebGL+微信社交开放能力的新平台。 该框架分为三层,是典型的分层架构。 微信中有一个小游戏运行时来运行小游戏,操作系统本身可能涉及不同类型的设备。
如果放大一个小游戏的运行时,你可以看到很多细节。 首先是游戏逻辑手机游戏平台开发,也就是独立于平台的游戏逻辑的开发。 第二部分是游戏引擎,大部分会用到一些引擎工作流程以及各个系统封装的一些高层API。 第三部分是weapp。 小游戏的框架参考了webview的框架,但实际上它的底层并不是webview,而是webview的一个精简优化的平台。 小游戏只有一些与核心相关的渲染API。 这里的weapp-adaper是为了让小游戏的能力适配更接近webview的环境,从而让更高级别的游戏或者引擎本身能够更快的融入到平台中。
接下来我主要给大家介绍一下如何利用微信的能力来开发小游戏,主要分为以下10个部分。
1.选择小游戏引擎
首先,开发游戏时,必须选择引擎。 我们与发动机厂商也有比较密切的合作。 开发小游戏所用的引擎一定要合适。 例如,在底层2d游戏素材,引擎可能一开始只支持原生游戏,必须对微信小游戏进行一些适配,依靠浏览器的独特能力。 Cocos Creator、Egret Engine、LayaAir Engine 三个引擎已经支持小游戏的开发。 网上也有相应的文章介绍了如何发布到微信小游戏平台。
2.设备/环境适应
关于设备管理的适配,小游戏将会有API提供获取屏幕宽高、设备像素比等的能力。小游戏开发完成后,您还可以发起一个小游戏。请求在开发者工具中进行真机测试。 微信针对不同设备提供了测试集群,帮助开发者提前发现问题。 基础库本身提供的wx API是一个不断迭代更新的过程。 对于使用新能力的小游戏,需要实现低版本兼容。 例如,如果检测到不支持新API的较低版本被允许损害服务用户。 同时,如果某个低版本的用户比例较小,可以考虑直接在管理后台配置小游戏所需的基础库的最低版本。 当然,这也意味着,当这群用户接触到这款小游戏时,微信客户端会弹出A提示,要求用户更新到新版本的微信才可以使用这款小游戏。 如果他们不更新,他们可能会失去这个用户。
3.微信登录
小游戏的登录流程与小程序类似,需要用户自定义登录状态。 appsecret/session_key代表小游戏开发者与微信平台之间的信任协议,例如托管数据的支付、上报等。 平台需要验证access_token,如果与用户相关,则必须验证session_key的签名材质材料,以确保请求来自小游戏开发者或用户。 access_token是应用状态的access_token,与用户无关。 它需要确保在全球范围内维护一份副本。 应该有一个中央控制模块来保证access_token有效。 同时,本地缓存的access_token在有效期内直接使用手机游戏平台开发,而不是每次使用都去。 生成新的access_token,否则可能会遇到调用频率限制错误,影响服务。 切记不要将appsecret/session_key放在前端代码中,否则可能会被恶意利用,损害小游戏开发者或用户的权益。
4、缓存
缓存类型包括数据缓存和文件缓存。 数据缓存为key-value存储,适合结构化小数据存储,上限为10MB。 文件缓存提供了完整的文件系统API,包括目录/文件的添加、删除、修改和读取。 适用于频繁使用的网络资源的本地缓存,上限为50MB。
与浏览器不同,微信只提供基本的存储管理能力,不会对存储满时存储什么、删除什么进行任何操作。 开发者可以灵活地自行定义缓存和淘汰策略,例如将经常访问的资源存储在文件系统中,并在文件存储满时清除一些最近不经常访问的文件。
5. 开放数据域
我们来谈谈开发数据域,这意味着向小游戏开放用户数据,同时保护用户隐私。 这是一个封闭的、独立的 JavaScript 作用域。 开放数据域是一个独立的目录,入口文件为index.js。 目前的限制是只支持2D渲染模式,数据只能进不能出。 例如,一个排行榜必须是给用户看的。
我们简单看一下它的实现。 左侧是主域。 用户拿到这些数据后,排行榜其实就是一个Canvas。 不同的是Canvas无法取出数据,也无法分析数据是什么。 主域中有一个 Canvas。 在微信中,上屏Canvas与屏幕关联,其次是离线Canvas。 离线Canvas可以根据您的需要使用。 数据一旦打开,上屏Canvas中的数据就无法取出,也无法取出下一个Canvas,保证了数据的安全。
因为我们的数据是在开发数据域,用户没有办法开发。 因此,开发者在开发过程中需要将所需的数据托管给我们,并与用户关联起来。 这样就可以在开发数据域中获取相关数据。 其应用场景包括好友排名、群组排名、超越好友提示等。当用户输入时,重复用户的所有操作,并且所有用户的输入都是在屏幕上的Canvas和屏幕外的Canvas上获取的,并且没有开放数据将会渗透。
文章来源:https://www.zhihu.com/question/264980913/answer/388200271