作者 |凌华彬、王哲 责编 | 徐威龙 一、前言 在第一篇文章《微信小游戏开发上手》中,我们给大家介绍了上手微信小游戏开发所需要的知识,以及小游戏的开发环境和工具。学会如何开发小游戏固然重要,但是更重要的是,什么样的游戏更适合小游戏环境和它的用户。 我们都知道小游戏是运行在微信内部的游戏环境中的,那么微信用户也就是小游戏的潜在用户,这些用户在使用微信时,会被什么样的游戏所吸引?会分享什么样的游戏?什么样的游戏能融入用户的社交过程?这些在今天都没有最佳的答案,开发者们都在探索,也正是广大小游戏开发者的机会所在。但毫无疑问的是,制作这样的爆款游戏一定需要完美理解各种微信社交/系统 SDK 接口的能力,并将其发挥到极致。 今天我们会更详细分析小游戏环境给大家开放的各种 SDK 接口,以及这些接口可以承载什么样的游戏体验。当然,微信小游戏官方文档中,对这些接口都有很详细的使用介绍,我们不会重复这些具体的 API 调用细节,会更多侧重在这些接口所提供的功能和潜力上。最后,我们还会给出一个 Cocos Creator 制作小游戏的案例。 二、小游戏提供的接口能力 微信 SDK 接口通用规则 微信的 SDK 接口大多有非常接近的使用方式和命名规则,下面是我们总结出来的一些经验: 接下来我们来看具体的接口,先看大家最关注的三大接口:用户、转发和支付接口。 用户接口 用户接口方面,开发者最应该关注的就是用户的登录了,登录接口的使用示例如下: 按前文所说,要做到好的用户体验,所有异步接口的 fail 都应该被处理,Login 更是如此,如果 Login 失败,游戏很难进行下去,除非是纯单机游戏。至于失败的处理,我们建议重新尝试,或者引导用户关闭小游戏再次尝试。 回调接口中的 res.code 是用户的登录凭证,通过它可以在开发者服务器后台换取 openid 和 session_key 等信息,部分 API 可能包含用户的敏感数据,这些敏感数据需要传递 session_key 才可以获取,否则只能获得很有限的基本数据。具体信息请参考用户登录态签名文档,目前需要登录态签名来获取敏感数据的 API 为: 除此之外,部分 API 调用需要用户的授权方能使用,如果没有申请过授权,第一次调用时会自动申请,流程如下: 也可以在调用 API 之前做预授权: 授权的详细范例和需要授权的 API 列表请参考微信官方文档中的用户授权章节,地址:https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/authorize.html。 转发接口 在第一篇文章中,我们提到小游戏最大的开创性能力,可能就是从转发入口点击直接进入游戏的超快捷体验。从技术角度来说,小游戏中的转发分为被动转发和主动转发(主被动是针对游戏开发者来说): 使用 wx.showShareMenu 在右上角 … 按钮的弹出菜单中显示转发选项,这样用户游戏中的任何时候,都可以发起转发。可以通过 wx.hideShareMenu 来去掉转发选项。 同时,开发者可以监听 wx.onShareAppMessage 来监听用户转发行为,并准备适宜的转发内容。具体来说开发者可以在回调函数的返回值中定制转发内容: 1. title:标题,不传则默认使用当前小游戏的昵称; 2. imageUrl:转发显示图片的链接; 3. query:游戏参数,遵循 key1=val1&key2=val2 格式的查询字符串,从这条转发消息进入后,可通过 wx.onLaunch 或 wx.onShow 获取这些启动参数。 所谓主动转发是指开发者在游戏交互中主动替用户发起转发请求,一般是玩家在游戏中点击某个分享按钮后,开发者通过调用 wx.shareAppMessage 直接调起转发窗口。 开发者还可以为所有的转发设置 withShareTicket 模式,这种模式下,开发者在转发和用户通过转发链接进入游戏时,都可以获取一个 shareTicket。将 shareTicket 传入 wx.getShareInfo,可在回调中解密数据来获取分享的群 id。关于数据解密请参考加密解密算法文档,地址:https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/signature.html。 支付系统 在小游戏 API 文档中并没有支付相关的 API,不过目前从安卓已上线的小游戏来看,已经有支付的体验了。至于未来何时会开放给所有开发者,还请期待微信官方的消息。 网络接口 网络接口分为三个部分:网络请求,WebSocket,上传下载。 文件系统 小游戏给开发者开放了很完整的文件系统接口,这点和浏览器中不支持文件 IO 的情况完全不同。一方面这给了开发者更大的自由度和发挥空间,但另一方面,这也是目前微信小游戏环境所必要的 API,因为微信小游戏环境不支持类似浏览器的资源缓存和资源过期机制。 具体来说,浏览器对于用户已经访问过的资源,会进行缓存,再次访问时,会优先从缓存获取,而不是发送请求给服务端,这样可以尽可能减少网络使用,优化页面响应速度。当服务端资源更新时,浏览器会发现本地资源已过期,自动清除对应本地资源并从服务端获取最新版本。 而在小游戏环境中,如果想要避免每次都从服务端获取资源,就需要自己实现一套类似的资源缓存和过期方案,这样的方案就不得不依赖于上面的下载接口以及文件系统接口。好消息是,Cocos Creator 提供了一套完整的资源管理方案,我们会在下一篇分享中详细讨论。 要理解小游戏的文件系统,首先要理解小游戏的文件沙盒环境: 所有的文件系统接口,都是在这个文件沙盒环境中执行的,所有的文件目录也是相对于沙盒环境的,所以我们不用担心不同小游戏或者不同用户之间的文件冲突。 从 API 使用的角度来说,所有文件系统接口都是由 FileSystemManager 来提供的,开发者需要首先通过: 来获取 FileSystemManager 对象,然后调用它的 API 来完成需要的功能,下面通过下载、读取、删除文件流程展示 API 的用法: 以上只是最基本的一些接口使用。除此之外,微信小游戏还提供了 renameFile、copyFile、readdir、writeFile 等,大家可以参考 API 文档自行探索。细心的开发者还会注意到这些接口大多包含同步版本,比如 fs.readFileSync,我们建议一律使用异步版本的接口,否则文件 IO 造成的阻塞会影响到游戏运行的流畅度和游玩体验,相比之下,显然编写异步代码这点麻烦还是可以承受的。 其他接口 除了以上这些接口以外,还有很多接口对于特定游戏类型非常重要,下面列举一些例子: 三、从接口能力思考小游戏的机会 虽然接口的分析讲完了,但是从上一篇的反馈来看,恐怕大家还是不能满意的: 微信小游戏开发上手的文末评论 看来大家最关心的是,小游戏该如何为自己赚钱?虽然被吐槽,不过至少大家的胃口被吊起来了,那么究竟这个问题的答案是什么呢? 其实这个问题答案就是没有答案~这也是最好的答案。 为什么这么说呢?试想一个已经有成熟商业模式的游戏平台,普通开发者再入局还有机会吗?今天微信平台的小游戏还没有被大家摸透,意味着开发者的资源水平还没有成为决定性的因素。所以今天入局的开发者仍然在同一条起跑线上,都有机会摸到小游戏玩家的甜区(Sweet Point)。 虽然没有答案,不过我们还是可以尝试回答几个与此相关的问题,希望抛砖引玉。 四、实例:用 Cocos Creator 制作第一个小游戏 长篇大论了这么久,可能大家又要吐槽太抽象了,一点实践都没有。那么我们就来分享一个小游戏案例,前一篇也提到游戏引擎对于微信小游戏开发所能提供的强有力支持,作为 Cocos Creator 的核心开发人员,自然要给大家安利一下如何使用 Cocos Creator 制作一款小游戏(【编者注】@两位大佬,出门右转,交下广告费)。 五、总结 系列文章的第二篇给各位总结了小游戏提供的微信 API 能力,以及如何利用这些能力。也从我们的理解角度分析了微信小游戏环境的独特性,希望能够抛砖引玉,激发开发者的想象力,找到最适合微信平台的游戏设计。
注:小游戏官方文档地址:https://mp.weixin.qq.com/debug/wxagame/dev/document/render/canvas/Canvas.html?t=201816
wx.getSystemInfo({
success: function (res) {
// res 一般是一个包含调用结果的对象
console.log(This phone is + res.brand + + res.model);
},
fail: function (res) {
// 通过 res.errMsg 可以获取错误信息
console.warn(res.errMsg);
},
complete: function () {
console.log(API call completed);
}
})wx.login({
success: function (res) {
// res.code 为用户的登录凭证
if (res.code) {
// 游戏服务器处理用户登录
} else {
// 失败处理
console.log(获取用户登录态失败! + res.errMsg);
}
},
fail: function (res) {
// 失败处理
console.log(用户登录失败! + res.errMsg);
}
});用户登录态签名文档:https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/open-ability/http-signature.html
wx.showShareMenu:https://mp.weixin.qq.com/debug/wxagame/dev/document/share/wx.showShareMenu.htmlwx.hideShareMenu:https://mp.weixin.qq.com/debug/wxagame/dev/document/share/wx.hideShareMenu.htmlwx.onShareAppMessage:https://mp.weixin.qq.com/debug/wxagame/dev/document/share/wx.onShareAppMessage.html
wx.shareAppMessage:https://mp.weixin.qq.com/debug/wxagame/dev/document/share/wx.shareAppMessage.html
wx.request:https://mp.weixin.qq.com/debug/wxagame/dev/document/network/request/wx.request.htmlAPI 文档:https://mp.weixin.qq.com/debug/wxagame/dev/document/network/websocket/wx.connectSocket.htmlwx.uploadFile:https://mp.weixin.qq.com/debug/wxagame/dev/document/network/upload/wx.uploadFile.htmlwx.downloadFile:https://mp.weixin.qq.com/debug/wxagame/dev/document/network/download/wx.downloadFile.html
FileSystemManager:https://mp.weixin.qq.com/debug/wxagame/dev/document/file/FileSystemManager.html?t=201818
let fs = wx.getFileSystemManager();作者简介:凌华彬,Cocos Creator 主程、Game Jamer、玩家,曾负责 Cocos2d-JS、热更新框架、JSB 框架,现在主要在负责小游戏发布流程、Cocos Creator 引擎新渲染器架构。王哲,Cocos 引擎创始人、首席客服。
我想做一个微信小程序小游戏,应该怎么做?
发布人:无锡公众号代运营 发布时间:2022-04-19 566 次浏览
我想做一个微信小程序小游戏,应该怎么做? - 知乎
上一篇: 从零开始教你做小程序(一)
最新资讯