实际上,小程序和迷你游戏仍有一些共同点,尤其是在某些后端服务中。例如,登录部分小程序与迷你游戏相似,而Wafer2也支持迷你游戏。
如何快速开发流行游戏? “热”是可操作的术语。迷你游戏发布后的120天内,在“ 微信 developer”的官方帐户上有一条推文。其中有几个数字可用于描述“热”一词。截至微信,距离正式允许第三方开发人员发布小型游戏已有22天。已经发布了300多种小游戏。有几款游戏的注册用户总数超过1亿,还有几款Android游戏的月营业额超过1000万。
文章还提到了与发热有关的两种姿势。首先是社会匹配程度。在小型游戏的分散环境中,将游戏内容与微信社交互动整合在一起是很重要的一点。同时,开发人员还需要使用社交互动来增强用户体验和组。在聊天共享和用户骚扰之间选择一个平衡点太多。第二个是易于操作,即游戏易于使用且易于操作。这是根据游戏成为热门产品后的观察得出的结论。这并不意味着可以开发出具有这两个特征的热门游戏,而新的热门游戏可能无法满足这些特征,仅供参考。
今天介绍的内容趋向于更具技术性,因此将“热门”从标题中删除,并且不会介绍如何开发特定的游戏逻辑,而是更倾向于利用微信的开放能力开发一个小游戏。
什么是“迷你游戏”?什么是迷你游戏?
首先,让我介绍一下迷你游戏是什么。从普通用户的角度来看,迷你游戏是小程序的子类别,可以轻松地在微信中进行购买和分发,点击和播放,并具有出色的用户体验。迷你游戏为小程序,普通用户无法区分它,也不需要区分它。
迷你游戏运行时
如果您放大迷你游戏的运行时,则可以看到很多细节。这是典型的分层体系结构:
顶层的蓝色部分是游戏代码,它分为三部分:游戏逻辑,游戏引擎和weapp-adapter。大多数游戏开发将使用引擎封装的某些引擎工具,工作流和高级API来实现游戏逻辑。第二个是weapp-adapter,因为一方面游戏的底层不是webview,所以可以简单地将其视为简化和优化的webview平台;另一方面,核心功能的实现指的是Webview。因此,如果这里有一个适配器可以使mini game-wx API的低级API适应靠近Webview的界面,则访问上层引擎和现有游戏微信 mini游戏平台将更加容易,是weapp -adapter的角色。只需游戏逻辑。
可以看出,迷你游戏和小程序在架构上有所不同。迷你游戏没有页面概念,并且wxss / wxml不再存在。其次,底层实现不是webview。迷你游戏和Webview之间的关系只能说是与渲染相关的核心功能。通过简单地调整weapp-adapter可以使界面保持一致,但是同时,webview上的许多功能并不是等效实现的。例如,小型游戏没有DOM / BOM的概念,也没有全局文档/窗口对象。
迷你游戏的入口是游戏js文件,语言是Javascript,但是有一些限制,例如禁止动态代码执行,因此不支持eval,新功能和其他功能。配置为game.json时,您可以配置水平和垂直屏幕,界面超时和其他参数。 wx API的功能可以在js中组合以实现游戏逻辑。非代码资源应尽可能放入CDN中,以减少打包后整个代码包的大小,以加快用户的首次输入速度。 微信第一个软件包的大小当前限制为4MB。
Webview适配器
让我们谈谈Webview适配器。其初衷是让游戏开发人员更加熟悉我们的平台,因此我们的平台将在功能方面尽可能适应Web视图。实际上,这种适应也是非常简单的一层。例如,我们在浏览器中使用image对象创建图片,但是在迷你游戏中,它是由wx.createimage创建的,代码中需要简单的修改。
类推,常见的Canvas和文档对象是通过简单的适配在Adapter中实现的。您可以在链接中研究代码。在官方不再继续维护此适配器之后,我们将更多地关注基础功能的构建。
迷你游戏能力概述
下图是迷你游戏功能的概述。迷你游戏功能的迭代速度相对较快,并且某些功能尚未列出。例如,最近刚发布的游戏界和健康系统中与反沉迷有关的一些界面。
首先让我们看一下基本功能。在渲染中,同时支持WebGL1.0和Canvas 2D。这里的画布更接近浏览器中的标准。同时,这里提到了可控帧频的概念,如果迷你游戏在后台运行,则可以尽可能降低帧频。
在多媒体部分,小型游戏无法像小程序一样实现实时音频和视频流传输,我们将在将来进一步支持。网络IO部分类似于小程序。我们还提供了一些UI组件,例如上拉键盘和模式对话框。
迷你游戏的社交开放性现已发布。最重要的功能之一是在开放域中打开微信的朋友关系供开发人员使用。考虑到在保护用户隐私方面存在一些设计限制。
由于迷你游戏的分散性,因此共享此部分也非常重要。开发人员应考虑如何使用此功能。在代码方面,由于第一个程序包限制为4MB,因此某些小型游戏的代码大小可能相对较大。我们还计划分包能力,以允许异步加载和执行代码,但是我们必须对此代码进行审查。
如何开发小型游戏?
那么如何开发一款小型游戏?因为我只开发了一些简单的游戏,而没有开发专业的游戏,所以我将介绍更多有关如何使用微信的能力来开发小型游戏的信息。
选择一个小型游戏引擎
微信也与引擎供应商紧密合作。通常,当前的游戏引擎支持发布到多个平台。对于微信迷你游戏的新平台,已修改了一些引擎,例如Cocos Creator,Egret Engine和LayAir Engine。适应的主要工作类似于前面提到的weapp-adapter,将wx API的功能与引擎联系在一起。
例如,引擎通常会使用Webview平台对迷你游戏平台进行基准测试。适应过程是将wx API映射到webview功能,同时删除仅存在于webview功能中的依赖项,例如不再依赖BOM和DOM。改编的引擎上有相应的文章,介绍了如何将游戏发布到微信迷你游戏平台。
设备/环境适应
迷你游戏将具有API,以提供获取屏幕的宽度和高度以及设备的像素比率的能力。迷你游戏的开发完成后,还可以在开发人员工具中发起真实的机器测试请求。 微信提供了针对不同设备的测试集群,以帮助开发人员提前发现问题。基本库本身提供的wx API是一个连续迭代和更新的过程。对于使用新功能的小型游戏,需要较低的版本兼容性。
微信登录
迷你游戏的登录过程类似于小程序。用户需要自己定义登录状态。 appsecret / session_key表示迷你游戏开发者与微信平台之间的信任协议,例如托管数据的支付和报告,平台需要验证access_token(只能交换appsecret),并且用户相关需求需要被验证session_key的签名可以确保该请求来自小型游戏开发商/用户,而不是恶意的第三方或随机用户。
Access_token是应用程序access_token,与用户无关。它需要在全球范围内维护。应该有一个中央控制模块,以确保access_token有效。同时,在有效期内直接使用本地缓存的access_token,而不是每次都使用。使用它来生成新的access_token,否则您可能会在呼叫频率限制中遇到错误并影响服务。切记不要将appsecret / session_key放在前端代码中,否则坏家伙可能会使用它来损害迷你游戏开发者/用户的权利。
缓存
缓存类型包括数据缓存和文件缓存。数据缓存是键值存储,适用于结构化小型数据存储,上限为10MB。文件缓存提供了完整的文件系统API,包括目录/文件的添加,删除,修改和读取。它适用于常用网络资源的本地缓存。上限为50MB。
与浏览器的不同之处在于微信仅提供基本的存储管理功能,并且在存储已满时不对存储的内容或删除的内容执行某些操作。开发人员可以自行灵活地定义缓存和消除策略,例如将经常访问的资源存储在文件系统中,并在文件存储已满时清理最近不经常访问的文件。
开放数据域
开放数据域是一个封闭的独立JavaScript范围,与执行游戏逻辑的环境(称为“主域”)隔离。其目的是在确保用户隐私并改善迷你游戏的整体用户体验的前提下向第三方开放用户数据。以下是物理视图。主域的条目是game.js,开放数据域的条目是一个单独的目录,条目文件是index.js。
严格控制主域和开放数据域之间的通信,其基本原理是仅输入而不是“退出”。
•仅转发:允许外部数据进入开放数据域,即主域可以随时将消息发布到开放域,开放域引用由主域准备的本地资源
•无“出”状态:不允许将开放数据域中的数据上载到第三方服务器。因为在开放数据域中,index.js可以直接访问用户的敏感数据,例如播放朋友的数据。当然,最终的开放数据域需要index.js来合成各种数据,并将数据以图形和图像的形式呈现给sharedCanvas。主题sharedCanvas允许在主域的Canvas上绘制,最终用户将在显示屏上看到它。社交互动信息,例如好友排名,组排名或game.js绘制以外的好友。
对于开发数据域中的数据,开发人员无法将数据与游戏数据相关联,因此,如果您需要在开放域中显示游戏数据(例如分数),则开发人员需要将数据通过报告接口传递给主机游戏数据到平台。这样,就可以在开发数据域中获取相关数据,其应用场景包括好友排名,群组排名以及其他好友提示。