点击上方“CSDN”,选择“置顶公众号”

关键时刻,第一时间送达!

作者 | 凌华彬、王哲

责编 | 徐威龙

在微信 6.6.1 版本中,给用户推送了“玩一个小游戏才是正经事”的首屏小游戏入口,一时间整个朋友圈都在跳一跳。相信很多游戏开发者心痒难耐,想一探究竟。今天就由我和王哲从技术角度给大家科普一下微信小游戏的开发知识,这一系列文章源自我们 Cocos Creator 引擎团队和微信团队合作过程的总结,目前,Cocos Creator v1.8 编辑器已第一时间支持一键发布微信小游戏版本。

今天这篇文章是介绍微信小游戏开发系列文章的第一篇。

一、小游戏生态特点

目前微信小游戏已发布 17 款首发游戏,包括六款棋牌类游戏,以及欢乐消消消、爱消除、坦克大战、保卫萝卜等休闲游戏。

从入口方面来说,微信小游戏目前的主要入口有下面几个:

  • 群或好友分享

  • 识别小游戏二维码

  • 微信聊天列表页面下拉后出现最近玩过的小游戏

  • 发现 - 小程序

  • 发现 - 游戏 - 我的小游戏

从技术角度来说,微信小游戏是微信小程序的基础上添加了游戏库 API。小游戏只能运行在小程序环境中,所以小游戏既不是原生游戏,也不完全等同于 HTML5 游戏。但实际上小游戏面向的就是 HTML5 游戏开发者,为了能够让 HTML5 游戏可以尽可能低成本得移植,小游戏尽可能复用了 WebGL、JavaScript 等源自浏览器的 HTML5 技术。可以说小游戏是使用 HTML5 技术搭建,具有原生体验的微信内游戏产品。

小游戏采用这样的模式有很多优点,最大的优点在于稳定和可控。相比于原生,微信可以将游戏闭环在微信内部;相比于纯 HTML5,则不用担心被游戏切广告切支付。

微信小游戏的运行时环境与曾出现过的其他 Runtime 形态相比有一个很大的好处是「兼容 HTML5 生态」。也就是说不论你用哪个游戏引擎开发的 HTML5 游戏,都可以很容易地移植到小游戏上面。这使得微信小游戏可以直接从巨大的 HTML5 生态中借力。

而在技术之外,微信给小游戏最强的加持就是社交传播了。利用好微信的社交生态来获取新用户,将在小游戏的设计中占据非常重要的地位。我们可以看到,第一批 16 款游戏中,除了跳一跳有闪屏入口之外,其他的小游戏入口都藏得比较深,所以流量来源并不是主要靠推荐榜来的,而是通过社交传播来的。这点和市面上多数导用户、洗用户、滚服合服的游戏设计思路是不同的。

微信开放的优质入口,庞大的用户基数,以及即点即玩、利于分享的特性将赋予小游戏极大的潜能。一切都看各位开发者如何把握机会,找到适合微信用户的游戏品类和形态。

二、API 之上:开发小游戏的必备知识点

之前提到,小游戏的开发主要复用了 HTML5 技术栈,所以开发过 HTML5 游戏的开发者上手会快很多,甚至很多 HTML5 游戏都可以很快移植到小游戏平台。具体来说,微信小游戏的开发技术分为三个部分。

1. 底层技术

首先是开发语言,微信小游戏只支持 JavaScript,当然可以编译为 JS 的 TypeScript 以及 CoffeeScript 都可以作为开发语言使用。

其次是小游戏所支持的游戏库 API,主要包含 HTML5 的 Canvas 2D API 和 WebGL 1.0 API,使用任何一种 API 都可以完成游戏最重要的渲染功能,不过不能够混用,除此之外,只有 WebGL 渲染模式可以支持 3D 渲染。

2. 中间件:游戏引擎

当然,直接使用 Canvas 2D 或 WebGL 来制作游戏是门槛很高,也非常费时费力的一件事,你肯定不希望一个小游戏项目拖上一年半载吧?所以使用 HTML5 游戏引擎其实是非常明智的选择,引擎封装出的高层接口可以大大降低开发者的开发门槛,缩短项目周期。目前国内的三家主流引擎 Cocos Creator、Egret、Laya 均已支持小游戏发布,Phaser.js、Three.js 等国外 HTML5 引擎虽然并没有支持直接发布,经过一些定制也是可以成功运行在小游戏环境中。

3. 微信 SDK

除此之外,微信小游戏还提供了丰富的微信内部 SDK 供开发者调用,使用这些接口可以完成用户登陆、转发、排行榜等常规的社交功能。

不过除了这些常规玩法以外,最让人欣喜的是通过转发小游戏,可以完成玩家在游戏中的组队或对战,加上小游戏即点即玩的特点,这种邀战的游戏体验可以说是天衣无缝。

欢乐坦克大战中邀请好友组队

好友通过点击转发链接直接进入游戏完成组队

这种群转发 + 即点即玩的机制可能带来非常有趣的社交玩法。

三、API 之下:理解小游戏的底层技术架构

开篇提到,小游戏既不是原生游戏,也不能等同于 HTML5 游戏,它的开发环境实际上跟两者都有非常密切的关系。与 HTML5 的关系就是它复用了 HTML5 的渲染接口,但与原生游戏又有什么关系呢?我们用一张图来解释:

小游戏的运行环境其实是微信的原生环境,游戏的 JavaScript 代码并不是通过浏览器来执行的,而是通过图中 JS VM 层独立的 JavaScript 引擎来执行的。 在 Android 平台使用 Google 的 v8 引擎,而在 iOS 上则使用苹果的 JavaScript Core 引擎。

当然 JS 引擎只负责解释执行 JS 逻辑,并没有支持渲染接口,那么渲染接口和诸多的微信功能接口又是怎么实现的呢?这就不得不提到脚本绑定技术,这种技术可以将某种原生语言的接口桥接到脚本接口上,当在脚本层调用接口时,会自动转发到原生层,调用原生接口。微信小游戏环境用的就是这样的技术,将 iOS / Android 原生平台实现的渲染、用户、网络、音视频等接口绑定为 JavaScript 接口。这也就是图中的微信原生层模块到小游戏层模块的原理。脚本绑定技术无法在这篇文章中深入探讨,如果大家有兴趣,可以去了解 Cocos Creator 的 JSB 绑定实现,这也是游戏引擎中唯一一家完全开源的绑定技术实现。

小游戏在有了这样一套框架之后,HTML5 游戏在移植过程中仍然是会遇到无数 API 兼容性问题,最简单的比如 document 对象不存在,Image 对象不存在。为了降低移植成本,微信团队提供了一个 Adapter 脚本,适配了一部分浏览器接口。

如上图所示,Adapter 部分提供了大部分 HTML5 游戏所依赖的浏览器接口,这张图也比较完整得描绘了微信小游戏中开发者可以使用的接口模块:

  • 浏览器渲染接口

  • 浏览器 Adapter

  • 微信服务 SDK

值得一提的是,Adapter 脚本已经不再继续维护了,所以额外的接口适配都需要开发者自己完成,而依赖于 DOM 接口的大多数功能都是无法适配到小游戏环境中的。

刚刚也提到推荐大家使用游戏引擎去开发小游戏,小游戏环境的基础之上,游戏引擎不仅封装了高层接口,还尽力抹平了浏览器与小游戏环境之间的差异。

从图中可以看到,如果不使用游戏引擎,开发者面对的是小游戏的底层 API,在使用了游戏引擎后,面对的是引擎的 API。

总结游戏引擎为开发者所做的工作,包含下面几个方面:

  • Framework:

高层 API 封装对于游戏开发更便利;

资源加载适配;

事件处理适配;

音频播放适配;

窗口适配;

输入框适配;

添加其他缺失的接口,比如增加 DOM Parser 用于解析 TileMap。

  • EDITOR:

优化程序-美术-策划的协同效率;

优秀的游戏编辑器可以大幅缩短开发周期。

  • GENERAL:

优秀的游戏引擎提供高设备兼容性,稳定的运行性能;

跨平台游戏引擎提供无缝发布 HTML5、小游戏、原生平台的强大能力。

高效率的编辑器带来开发成本的降低;低入门门槛降低了人力成本;高兼容性和稳定的性能降低维护成本;跨平台/渠道带来强大的流量获取能力。对于开发者来说,这些就是生存和盈利的保障!

四、上手调试小游戏

需要注意的是,在撰文的今天,微信公众平台目前尚没有开放开发者申请游戏类目的权限,所以还只能通过小游戏开发工具的 “体验小游戏” 功能来做技术层面的尝试。不过不用着急,微信团队应该很快就会开放游戏类目的申请。

1. 微信开发者工具介绍

下面这张图就是微信开发者工具在做小游戏开发时的基本布局:

微信开发者工具基本布局

其中上方是工具栏,包含最重要的编译、预览和配置详情;左侧是模拟器窗口用来展示游戏运行效果;右上方是代码编辑器,可以查看项目中的文件列表,编辑文本文件;右下是调试器窗口,使用方法和 Chrome Devtools 完全一致。

2. 微信小游戏配置和入口文件

在微信小游戏项目中,project.config.json 和 game.json 配置文件是大家首先需要添加的,其中 project.config.json 可以定义你的小游戏 appid、游戏名、配置等。而 game.json 主要用于指定游戏朝向和网络超时时间。

另外,小游戏不支持任何 html 文件,入口文件是 game.js,你需要启动的引擎和游戏脚本都应当在 game.js 中用 require 函数引入,require 函数的用法遵循 node.js 的 require 规范。

3. 编译和预览

微信开发者工具会自动监听脚本和配置的变动,发生变动时会自动更新,你也可以通过顶部的编译按钮触发重新编译。当你需要在手机上预览小游戏的效果时,需要点击预览按钮来生成二维码,扫码即可进入小游戏。生成二维码的过程实际上是在压缩和上传小游戏包到微信 CDN 上,所以会花费一些时间。

4. 详情配置

详情配置中包含一些重要的配置选项,包括:

  • 调试基础库:小游戏应该选择 game;

  • ES6 转 ES5:是否将 ES6 脚本转换为 ES5;

  • 代码上传时自动压缩:是否压缩脚本;

  • 不校验安全域名、TLS 版本以及 HTTPS 证书:当你在本地测试,或通过非正式域名测试时,需要开启这个选项才能够正常访问你的服务器。

五、市场展望

最后我们从市场上来看,其实小游戏青睐的 HTML5 技术栈蕴含着巨大的机遇,目前使用 JavaScript 支持跨平台的游戏引擎已经不少。以 Cocos Creator 为例,编写一套游戏代码,可以在编辑器中无缝发布 HTML5 手机页游、PC 页游、手机原生游戏、小游戏。我们可以简单计算一下,根据 12 月初伽马数据的行业报告,国内 2017 年手机原生游戏 1162 亿,PC 端游 648 亿,PC 页游 156 亿,所以按比例简单计算的话,手机页游的市场空间 = 1162 ÷ 648 x 156 = 每年 280 亿人民币

如果进一步考虑 Flash 宣布 2020 年停更,市面大量 PC 页游都开始转用 HTML5 技术制作,而手机原生上也出现了大量的微端产品,那么如果不考虑此消彼长的制约, HTML5 技术可以支撑的游戏市场规模应该 = 280 亿 手机页游 + 156 亿 PC 页游 + 部分手机原生游戏 ≈ 每年 500 亿人民币

500 亿人民币还只是计算国内的规模。根据国外 Newzoo 在年中的数据,中国游戏产业规模占全球 25%,那么 HTML5 技术理论上可以支撑的全球手机页游、手机原生、PC 页游市场容量上限可达每年 2000 亿人民币

所以,掌握 HTML5 技术栈,掌握微信小游戏、QQ 厘米秀、Facebook Instant Games 等「手机页游」新平台上的社交游戏开发技术,洞悉这些社交平台上的用户特点、和提出针对性的游戏设计,对于想进入这个领域的游戏开发商而言,是近期迫在眉睫的事。

而且目前普遍的观点是,在资本的推动下,手机页游的时间窗口应该只有 1~1.5 年,这里面会有原生游戏大厂布局成功的,也会有新晋的研发商和发行商。而在游戏行业产生这样的风口,平均 5 年左右才能有一次。

作者简介:

凌华彬,Cocos Creator 主程、Game Jamer、玩家,曾负责 Cocos2d-JS、热更新框架、JSB 框架,现在主要在负责小游戏发布流程、Cocos Creator 引擎新渲染器架构。

王哲,Cocos 引擎创始人、首席客服。

————— 推荐阅读 —————

微信「跳一跳」带火小游戏,开发者如何快速上手?相关推荐

  1. 基础 | 微信「跳一跳」带火小游戏,开发者如何快速上手?

    作者 | Panda.王哲 在微信 6.6.1 版本中,给用户推送了"玩一个小游戏才是正经事"的首屏小游戏入口,一时间整个朋友圈都在跳一跳.相信很多游戏开发者心痒难耐,想一探究竟. ...

  2. 都说「跳一跳」是微信抄袭了育碧,万万没想到,他们在一起了!

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 简直对不起考虑到微信面子,没将后台那些吐槽微信抄袭育碧的留言精选出来的我! 今天的 2018 ...

  3. 微信小程序游戏「跳一跳」高分秘籍

    饱受争议的微信小程序从今年1月份上线到现在已经快一年了,被寄予厚望的小程序在这一年却并没有达到曾经预期的高度,反而是一直不温不火. 曾经有现象级的刷屏的小程序:匿名聊聊,本以为这会是小程序的新玩法.爆 ...

  4. 张小龙「跳一跳」都玩到 6000 多分,是时候掌握微信小游戏高级开发了

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 作者 | 凌华彬.王哲 责编 | 徐威龙 [CSDN 编者按]今天,在 2018 年度微信公 ...

  5. 微信小游戏「跳一跳」技术手段高分秘籍实现

    元旦赠书活动还在继续中,欢迎点击下方链接参与: 赠书一:<函数响应式领域建模> 赠书二:<Java函数式编程> 赠书三:<高可用架构> 最近这两天,从前天微信最新版 ...

  6. 「跳一跳」两年后,广告“杀死”游戏小程序?

    文 | 陈选滨 来源丨智能相对论(ID:aixdlun) 两年前,一款游戏小程序「跳一跳」火爆朋友圈,几乎所有的微信好友都在玩这款小游戏,刷新好友排行榜的分数.一时间,微信的社交圈子被成功引爆,游戏类 ...

  7. 当微信遇上 10 万战绩的「跳一跳」外挂,程序员还能“逍遥”多久?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 一款热门游戏,普通用户玩的是乐趣,而对于程序员来说,走的是非常人之路,以各种花样技术方法获取 ...

  8. 微信iOS盒子封停,Layabox助力小游戏开发者获得更多流量机会!

    昨天,游戏人的朋友圈都在唱凉凉. 原来,只因微信iOS的游戏盒子全面封停. 静下心来想一想,即使风不平,浪不静,生活终究要继续.做流量分发的或许可以改为做内容,把用户流量留在内容平台上.做研发的,可以 ...

  9. 教你如何自己写一个微信小游戏「跳一跳」外挂

    [回复"1024",送你一个特别推送] 其实也不能说算是外挂吧,算是个游戏小助手吧,毕竟不能抓包,也不能直接修改分数(据说之前可以直接抓包修改分数,不过这漏洞已经被微信官方修复), ...

最新文章

  1. Session Sticky
  2. 车险赔付率分析报告_车险改革究竟是涨价还是降价了?9月19号后买会便宜吗?...
  3. 世界不是gameBoy
  4. php生成网页按钮,JavaScript实现自动生成网页元素功能(按钮、文本等)_javascript技巧...
  5. ETL异构数据源Datax_datax-web简述_09
  6. linux进行显卡配置修改什么游戏,配置好Linux显卡驱动 爽快玩游戏
  7. 树莓派3vnc分辨率设置
  8. mysql统计age大于20的数_数据库命令记录
  9. php回调后门,PHP 回调后门笔记
  10. Echarts数据可视化parallel平行坐标系,开发全解+完美注释
  11. 5G催化、VR回春,千亿行业洗牌重来
  12. android sensor架构_转 Camx 架构知识点
  13. WiFi 空口抓包工具 --- OmniPeek
  14. 如何解决sql server 存储过程在查询分析器快,但程序调用存储过程执行慢的问题?
  15. ApiPost 测试工具
  16. android nfc源码分析,深入分析Android NFC技术 android nfc开发
  17. oracle建表案例,oracle创建表语句
  18. LabVIEW TDMS连续写入内存增长
  19. end=强制打印成一行;\t拉大列间距_xing2516_新浪博客
  20. 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化

热门文章

  1. vue中通过js加载图片显现
  2. 监控nginx服务,实现nginx宕机,zabbix自动重启其服务,如若重启失败,则邮件报警。
  3. UI自动化(四)-鼠标操作
  4. html——表格统计
  5. SecurecRT中文乱码怎么办?
  6. ABAP设计模式之---“里氏替换原则(Liskov Substitution Principle)”
  7. win10下如何设置防火墙允许程序通信
  8. 照片里的小动作,一眼识别搞定!MediaPipe带你开启动作大师之路
  9. 学习笔记--关于一个公式的证明
  10. Python 检索解析中药名与别称