欢迎来到腾讯云+社区,以获得更多腾讯大规模的技术实践干货〜
高级后端工程师邹伟也具有一些前端开发经验。 2010年从华南理工大学毕业后,他加入了腾讯,并参与了CDB和TGW等云服务的开发。现在,他主要负责微信游戏业务后端系统的体系结构设计和研发管理。
大家下午好。我今天分享的主题是如何开发热门游戏。实际上,小程序和迷你游戏仍有一些共同点。例如,在登录部分小程序与迷你游戏相似,而Wafer2也支持迷你游戏。
如何快速开发流行游戏? “热”是可操作的术语。今天介绍的内容可能更具技术性,即如何使用微信的开放功能开发小型游戏。迷你游戏上线120天后,发布了一些重要新闻,并且有几个数字可以用来描述“热”这个词。 微信面向第三方开发商的迷你游戏的正式发布时间为3月3日,现在,一些迷你游戏的用户已超过1亿,并且还有一些迷你游戏的Android月交易量超过10百万。您应该已经经历过。达到微信迷你游戏的流行程度。
与流行有关的两个知识,一个是如何发展的?首先,我们必须充分利用微信的社会意义。在微信的分散化背景下,社会共享和互动非常重要,因为传统交通分布没有普遍进入。第二是易于操作。游戏成为热门游戏后,我们只能根据数据得出这两个结论。并非可以使用这两个功能来开发热门游戏。
什么是迷你游戏?
首先,让我向您介绍什么是迷你游戏:迷你游戏专门指微信迷你游戏,它们是小程序的子类别,可以轻松地在微信中获得和传播。 ],单击并播放,具有出色的用户体验。从发展的角度来看,迷你游戏是基于Canvas / WebGL + 微信社交开放性的新平台。就框架而言,它分为三层,这是典型的分层体系结构。 微信有一个运行小型游戏的运行时,小型操作系统本身可能涉及不同类型的设备。
如果您放大迷你游戏的运行时,则可以看到很多细节。第一个是游戏逻辑,它是与平台无关的游戏逻辑的发展。第二部分是游戏引擎,其中大部分将使用一些引擎工作流程和由各种系统封装的一些高级API。第三部分是weapp。迷你游戏的框架基于Webview的框架,但实际上,它的底层不是Webview,而是经过简化和优化的Webview平台。这个迷你游戏只有一些与核心相关的渲染API。这里的weapp-adap旨在使小型游戏的功能适应更接近Web视图的环境,以便可以将更高级别的游戏或引擎更快地集成到平台中。
微信的运行时暴露于微信 API,并且所有功能都是通过微信 API释放的。底层的最基本功能与渲染有关,即Canvas 2d和WebGL。其他一些与微信相关的能力是另一种,因此迷你游戏在体系结构方面与小程序不同,但是用户体验并没有太大差异。迷你游戏没有页面的概念,并且在实现中并不完全是网页视图,并且已删除了不必要的部分。
通常来说,迷你游戏的入口是game.js,并且该游戏可以通过使用一些基本功能来绘制游戏的整个界面。配置文件game.json主要用于配置迷你游戏是水平游戏还是垂直游戏。迷你游戏的全局对象游戏Gobal与Web视图中的窗口对象相似,并且支持JavaScript语言。但是,迷你游戏的一个重要限制是禁止执行动态代码。开发人员必须先提交审查,然后才能为普通用户上架。此外,包括引擎在内的小型游戏的代码大小相对较大,因此限制大小大于小程序,并且第一包限制大小为4M。
让我们谈谈Webview适配器。其初衷是让游戏开发人员更加熟悉我们的平台,因此我们的平台将在功能方面尽可能适应Web视图。实际上,这种适应也是非常简单的一层。例如,我们在浏览器中使用图像对象创建图片,但是在迷你游戏中,它是由wx.createimage创建的,代码中需要进行简单的修改。例如,“画布”和“文档”是在适配器中实现的。您可以在链接中研究代码。有一些优化的版本,此后官方将不再继续维护此Adapter,因为我们将更多地关注基础功能的构建。如果每个人都已经熟悉该平台,那么开发游戏将变得更加容易。例如,在迷你游戏框架本身中,Document对象与普通对象是无法区分的。这是对Adapter的简单改编。
下图是迷你游戏功能的概述。最近,迷你游戏功能的迭代速度相对较快,并且一些功能尚未列出。例如,尚未列出与游戏圈和健康系统相关的某些界面。首先让我们看一下基本功能。在渲染此部分时,WebGL1.0和Canvas 2D均受支持。这里的画布更接近浏览器中的标准。同时,这里提到可控帧频的概念,如果迷你游戏在后台运行,则可以尽可能降低帧频。在多媒体部分,小型游戏无法实现小程序这样的实时音频和视频流,我们将在未来进一步支持。网络IO部分类似于小程序。我们还提供了一些UI组件,例如上拉键盘和模式对话框。
迷你游戏的社会开放性现已向外界开放。最重要的功能之一是开放域,它为开发人员打开了微信的朋友关系列表,供开发人员一起使用,但是存在一些限制。由于小型游戏的分散性,因此共享此部分也非常重要。开发人员应考虑如何使用此功能。就代码而言,因为第一个程序包限制为4 MB,所以某些小型游戏的代码量可能相对较大。我们还计划分包能力异步加载代码,但是我们必须对此代码进行审查。
如何开发小型游戏?
那么如何开发一款小型游戏?因为我只开发了一些简单的游戏,而没有开发专业的游戏,所以我将介绍更多有关如何使用微信的能力来开发小型游戏的信息。
选择一个小型游戏引擎
首先,我们在开发游戏时必须选择引擎。我们还与发动机供应商有着相对紧密的合作。小型游戏开发的引擎必须兼容。例如,在底层,引擎一开始可能仅支持本机游戏,根据浏览器的独特功能,需要在微信迷你游戏中进行一些修改。 Cocos Creator,Egret Engine和LayaAir Engine这三个引擎已经支持了迷你游戏的开发。互联网上也有相应的文章,描述了如何发布到微信迷你游戏平台。
设备/环境适应
为了适应设备管理,迷你游戏将具有API,以提供获取屏幕的宽度和高度以及设备像素比率的能力。迷你游戏的开发完成后,还可以在开发人员工具中发起真实的机器测试请求。 微信提供了针对不同设备的测试集群,以帮助开发人员提前发现问题。基本库本身提供的wx API是一个连续迭代和更新的过程。对于使用新功能的小型游戏,需要较低的版本兼容性。例如,检测到允许不支持新API的低版本损害服务用户。同时,如果低版本用户占相对较少的用户,则可以考虑直接在管理后台配置迷你游戏所需的基本库的最低版本。当然,这也意味着,当这部分用户接触到此迷你游戏时,会弹出微信客户端提示A,要求用户更新至微信的新版本以使用迷你游戏。如果不更新,则可能会丢失用户。
微信登录
迷你游戏的登录过程类似于小程序,要求用户自定义登录状态。 appsecret / session_key表示迷你游戏开发者与微信平台之间的信任协议,例如托管数据的支付和报告,平台需要验证access_token,以及与session_key签名相关的用户,以确保从小游戏开发商或用户。 access_token在应用程序模式下是一种access_token。它与用户无关。它需要在全球范围内维护。应该有一个中央控制模块,以确保access_token有效。同时,在有效期内直接使用本地缓存的access_token,而不是每次使用。生成一个新的access_token,否则可能会在调用频率限制时遇到错误并影响服务。请记住,不应将appsecret / session_key放置在前端代码中,否则可能会恶意使用它来损害小型游戏开发商或用户的权利。
缓存
缓存类型包括数据缓存和文件缓存。数据缓存是键值存储,适用于结构化小型数据存储,上限为10MB。文件缓存提供了完整的文件系统API,包括目录/文件的添加,删除,修改和读取。它适用于常用网络资源的本地缓存,上限为50MB。
与浏览器不同,微信仅提供基本的存储管理功能,并且在存储已满时不对存储的内容和删除的内容进行某些操作。开发人员可以自己灵活地定义缓存和消除策略,例如将经常访问的资源存储在文件系统中,并在文件存储已满时清理一些很少访问的文件。
开放数据域
让我们来谈谈数据域的发展,即在保护用户隐私的同时将用户数据开放给迷你游戏。这是一个封闭且独立的javascript范围,开放数据域是一个独立的目录,其入口文件为index.js。当前的限制是它仅支持2d渲染模式,并且只能访问数据。例如,排行榜,其用途必须用于向用户展示。
让我们简要了解一下其实施计划,左边是主要领域。用户获取数据后,排名列表实际上就是画布。区别在于Canvas无法检索数据,也无法分析数据是什么。主域中有一个画布。在微信中,上方的屏幕Canvas与屏幕相关联,背面为离线Canvas。可以根据您的需要使用脱机画布。数据打开后,上方的Canvas屏幕无法取出内部数据,下一个Canvas屏幕也无法取出,从而确保了数据安全性。
由于我们的数据在开发数据域中,因此用户无法进行开发。因此,开发人员需要在开发过程中将所需的数据托管给我们,并将其与用户关联。这样,可以在开发数据域中获取相关数据,其应用场景包括好友排名,群组排名以及其他好友提示。输入用户时,将重复用户的所有操作,并在上方屏幕上的Canvas和屏幕外的Canvas上获得用户的所有输入,并且不会打开任何打开的数据。