写点什么

周桂华:我的小游戏开发之路(上)

2019 年 10 月 31 日

周桂华:我的小游戏开发之路(上)

8 月 17 日,“小程序·云开发”系列沙龙(小游戏专场)圆满落幕。本期沙龙云+社区携手微信 & 云开发官方团队为大家揭秘爆款微信小游戏背后的技术,全面讲解小程序·云开发、实时数据库库及小游戏联机对战引擎,助力小游戏开发。下面是周桂华老师从个人学习路径构建出发,阐述一个非游戏开发者是如何快速学习微信小游戏开发并同时驱动团队对接小游戏业务的。


分享中,花叔用 2W1H 来解释要讲的内容,介绍了小游戏是什么,团队为什么要做小游戏以及自己是怎么学习开发小游戏的。此外,还讲了一下自己的感悟。


演讲开始前,花叔用手机给大家表演了一个猜数字的魔术游戏,现场请到一位女听众,由她说出数字 3,花叔把预先盖在桌面的手机翻起来,屏幕显示的正是 3,大家惊讶不已,花叔说当年他就是用这个魔术追到现在的老婆的,接着他开始以 2w1h 的方式开始演讲。


第一个 W:小游戏是什么?

我觉得有必要说说小游戏是什么?在微信做第三方开发的时候有两类:


  • 基于行业通用网页技术框架的 H5,比如朋友圈中传播的有意思的页面,以及公众号文章,比如我的公众号里的文章。

  • 基于微信私有技术框架的普通小程序以及小游戏。



小程序是 2017 年 1 月份公布的,同一年的年底微信公布了小游戏。其实这两个都基于微信的技术框架,有微信私有的一些技术特性。那么我们理解的 H5 和小程序有什么区别呢:



区别很多,今天重点提一下其中三个:


  • 首先,普通小程序、小游戏不像普通 h5 那样能很好的跨平台;

  • 其次,小游戏不像小程序以及内嵌 h5 那样支持普通的微信支付,但却支持虚拟支付(基于米大师);

  • 最重要的一个区别在于,在微信里的技术载体中,目前小游戏是唯一一个真正做到关系链相关功能的载体。


而恰好最近官方发布了一个关系链升级的特性,今天我稍微介绍一下关系链数据在小游戏中的调用逻辑,也顺带讲一次这次升级所带来的的影响。



旧版关系链数据调用逻辑


此前,官方为了保护用户关系链数据,在提供主域的情况下,会在前端额外提供一个封闭式的子域(也称开放数据域),主域通过 postMessage 的方式把信息丢给子域,而子域需要暴露关系链的数据时,比如好友的排行榜,它是通过一个封闭式的 sharecanvas 供主域绘制。子域不可能发出第三方请求,你的游戏中的游戏数据以及关系链数据都是存在微信给你定义好的托管服务器里。这是以前的那一套,有点绕。现在这套升级了,会怎样呢?新的那一套更绕了。



新版关系链数据调用逻辑


新的逻辑里会额外再提供了两个服务器,一个是 JSserver 服务器;另一个,用于存储玩家间交互数据的互动型的托管数据服务器,通过这两个可以实现什么效果呢?我做了一个 demo,这是我的好友排行榜,我给我老婆点一个赞,我老婆手机的排行榜就拿到一个赞了,玩过小程序子域开发的同学知道以前是不能做到的。



现场演示了一个关于花叔排行榜以及花叔老婆排行榜点赞 demo


接下来,我简单说说这里面的技术逻辑。首先是 JSserver 服务器,它干的事情是校验用户的数据,同时他能把数据存到普通的托管数据里,即老的那一套托管数据。在存的过程中,他又可以把数据又存到新的互动型数据库里了。


关系链数据的调用是小游戏里比较特别的一些能力,就先讲到这里。


第二个 W:为什么要做小游戏?

我们为什么要做小游戏呢?大家做小游戏的目的是什么?很多创业团队做小游戏可能是为了赚钱,有或者为了构造自己的流量矩阵。而对于我们来说,其实做小游戏不是为了赚钱。我们是一个很奇怪的团队,跟普通的游戏开发团队不一样,以往我们做的最特别的事情是开发一些在朋友圈或好友群传播的 H5 页面,里面会做一些有意思互动。比如说吴亦凡的案例,其实就是在你觉得自己在看某个新闻的时候,他突然动了,同时说要给你打电话解释。这会让你觉得有意思,就会主动传播事件,而 H5 的最后的导向一款叫 CF 的游戏,目的是推广这款游戏。这是我们团队以往大多时候做的事情。


从技术来看的话,团队做的是互动营销技术,我们的技术载体是视频以及 H5。技术栈是网页开发技术,赛道是双平台 H5,接着小游戏来了。我们认为游戏也是一种互动形式。


我们在小游戏发布之前已经开始接触这个领域,这时候团队的技术栈从原来的一个变成三个了。我们做小游戏的目的不是为了广告,不是为了内购,不是为了 ARPU,我们目的是为游戏创造游戏。对我们来讲,我们的指标更重要的是客户端游戏品牌曝光,预约转化,新增转化。


所以,2017 年 12 月小游戏首次发布的时候,前 17 款里的游戏,我们提供了 2 个,一个是拳王,那是打地鼠的,另一个是《纪念碑谷 2》试玩版小游戏。这两个游戏是偏程序开发思维的引擎做的。



刚接触到游戏领域时,我们觉得还蛮好玩的,越是接下来做了类似《红警》小游戏、权力的游戏小游戏等策略型的游戏,以及休闲类型的叠塔的游戏。



接下来玩的越来越大了,我们为很多其他游戏业务做了小游戏:



而这些小游戏最终都会引导用户去预约或下载客户端游戏,大部分的目的都是这样。


反观这一路,很多案例以前从来没做过,这一路我带着一群小伙伴,对一个新的领域进行尝试,与此同时,自身要先学会,所以接下来会说说我自己是怎么学的。


最后一个 H:如何学习开发小游戏?

今天分享的另一个主要内容是关于我怎么去学小游戏开发的,可能也不算太深入,所以大家有疑问的话,可以随时打断我。


我是怎么学的?实不相瞒,我是重构工程师,以前在腾讯比较容易被知晓,但在别的公司不容易被知晓,到目前为止还是属于设计,我本身是个设计师,所以我学习的方式很粗暴。


2017 年,我建了公众号,当时小程序出来,一开始只是为了学小程序,所以我做了一个小程序,这个小程序是关于思维导图的工具,初衷是我上班的时候经常要理思维导图,如果要在手机上做这个事情,会很麻烦,而其他移动端的思维导图工具大多是收费的,我就想自己做一个,我就把它做出来了,所以积累了不少的微信开发经验。


突然,小游戏来了,我就想切过去研究一下。但这时候会面临一个问题:我怎么开始呢?


我这人很直接,会先定一个很死的目标。这时候我定的目标就是“一定要单独做一个游戏出来”,至于具体是什么方式、什么方法,我去查。然后我就开始了,先自己画交互,把元素之类的都画好。我自己是个设计师,但我的设计能力是不行的,所以我选的是一种手绘风,灵魂画师的那种风格。



由于个人是个重构工程师,所以对 JS 有一定的了解,但以前的思维都是从上往下的编程思维,还没有对 mvvm 或面向对象的设计模式研究太多。于是我就选一个没有那么多约束的框架去做就行了,我选了 Createjs 当引擎,因为它也没有太多的套件,它像用一个 JS 库一样。


当时也没细究它跟别的引擎有多大区别,定了就定了,就基于这个去学。而后台呢?当时腾讯云为小程序做了一套封装好的后端方案(一台业务服务器一台会话服务器那套),当时这套方案其实是兼容小游戏的,我就直接用了。


接下来拼命学,拼命试,拼命做 demo,最后做出了我这辈子的第一个游戏。其实它是早期吃鸡类小游戏中的一块,每消灭一个玩家就会有一个另一个进来,我当时虽然不是太懂游戏开发,但还是给他做了一些特效,比如说激光炮,以及带 AOE 效果的技能效果。



你们猜一下实时对战方案是什么?讲一个故事,很搞笑。前段时间有一个网友,像你们一样,我们都在一个开发群里,他突然有一天看到我了,他就加了,他机动的说:“原来你是花叔,我看你的游戏做实时对战,好厉害,这两年我一直在研究实时对战的技术,我做了很多 demo,都觉得没你这个做的好”他给我看一下,我说还不错,他接着追问我当时是怎么做得这么流畅。我说:AI。他懵了,他不知道怎么接下去。


所以,我是一个入门者,但我要实现类似吃鸡的游戏,可以从不同的方式切入。我以前做了个机器人漏记,简单的对战模式,让它自己跑。这是个让我有点感触的小故事。


其实做这个游戏的另一个最大的感触是:做游戏像在创造一个世界。像《坦克大战》的时候,里面有剧情,对技能有故事描述,我当时像写小说一样去构思故事。比如说我结合五行中的风火雷给游戏的技能创作了一些故事,小游戏自己有一个内置的社区,我就把这些故事放在那里。



可以说,我很享受这个过程,非常的开心。至于代码,不说特别多,我用的是 Createjs 的框架。根据官方的文档,只要稍微改一下,Createjs 就能用在小游戏上了。具体就是把官方把三个 JS 都暴露一下,做一个聚合 js,分别引用就搞定了。



不过当我做完这个游戏之后,我问我们组里面比较有游戏开发经验的同事,我问他你觉得我这样做行不行?他说:“你好傻,为什么我们做游戏要这样做呢?你这样做很累,每一句代码,每一个按钮,每一个效果,你都是用代码写的,你这样不行吧”。


他这么一说,我也觉得有道理,因为你单纯用 createjs 去做的话,很多 UI 层面的事情都需要一句句代码去实现。所以它虽然适合初学者去玩的,但也面临一个问题:偏程序开发的形式来开发游戏太累了,怎么办?


2019 年 10 月 31 日 14:39971

评论 3 条评论

发布
用户头像
2020年,我在网上看到许多家长反应出:孩子们连上游戏或者陈迷游戏之中,不能自拔!也就是说:影响到大部分孩子们不能健康学习成长了!这的确是个大问题。2因此:我们要想出一套:让孩子们在玩中学,学中玩的健康,愉快,开心ヽ(○^㉨^)ノ♪的小游戏!2引用孔子教学法融入新式教学法!及因才施教。也就是根据孩子们的特场而培养孩子们!3我们不要老是强迫孩子们学什么。老话讲得好!行(●°u°●)​ 」行出状元嘛😄!5我们要让孩子们从小,开心ヽ(○^㉨^)ノ♪!愉快!轻松松的,自然而然的喜欢😍上学习!周桂华学习观点儿!
2021 年 01 月 25 日 19:54
回复
用户头像
我在网上看到很多家长,对大部分孩子们迷上游戏,陈乙延游戏。因而在学习方面不得健康学习成长的愿言!2那么怎么办呢?3那就要游戏设技者们,做出大大改量。及设技出既健康,又引诱孩子们健康学习成长的好游戏!及在玩中学,学中玩,让孩子们慢慢的,慢慢的自然,轻松的喜欢😍上学习!2引用孔子教学法融入新式教育。及因才施教。也就是根据每个孩子的特场而培养!不要老是强魄孩子们学什么科目。让孩子们从小轻松,愉快,开心ヽ(○^㉨^)ノ♪的喜欢😍上学习!周桂华学习观点儿!TA们,如果觉得不错(*๓´╰╯`๓)♡!请点赞转发到你朋友圈。一起学习成长吧!
2021 年 01 月 25 日 19:38
回复
用户头像
我周桂华在网上看到了很多家长老百姓,关于游对孩子们的学习健康成长有很大影响!为此,有的家长提出册除不利于孩子们健康成长的游戏。2耍想孩子既们既玩游戏,又不影响孩子们健康学习。那么就要设置出或者设投出,孩子们在玩中学,学中玩。这样一日复一日,一年复一年,慢慢的慢慢的孩子们😊自然健康的成长学习😊!不要隨便给孩子们施加太大压力!3引用孔子教学,因才施教。4也就是根据每个孩的特场喜👌好而不同的培养学习!周桂华个人学习观点儿!
2021 年 01 月 25 日 19:24
回复
没有更多了
发现更多内容

真香!Linux 原来是这么管理内存的

cxuan

Linux 操作系统

NameNode和SecondaryNameNode工作机制

古月木易

NameNode econdaryNameNode

当远程工作成为未来的工作方式......

Atlassian速递

Atlassian Jira

蚂蚁上市:P7可获1200万元期权,酸酸酸酸酸...

程序员生活志

互联网热点 蚂蚁金服

企业为何需要建立统一的复用型软件平台?

力软.net/java开发平台

Java 企业信息化 开发工具 框架 平台应用服务

央行数字货币或将成为经济“内循环”的未来加速器

CECBC区块链专委会

数字经济 全球经济下行 降息 惠普金融深化

原创 | 使用JPA全面实现DDD持久化【关于本书】

编程道与术

Java hibernate DDD JDBC jpa

顺势昌,逆势亡:人啊,得学会做信天翁,而不是鹧鸪鸟

非著名程序员

创业 程序员 管理 提升认知

一个小实验,来

池建强

算法 薪资

Django框架,Flask框架和Tornado框架各有什么优缺点

奈学教育

django flask tornado

国家版权局发布《关于规范摄影作品版权秩序的通知》

CECBC区块链专委会

电子存证 作品版权 侵权盗版 剑网2019

什么样的信任才值得拥有?谈一谈极客邦的5K1S文档

泰稳@极客邦科技

Django框架,Flask框架和Tornado框架各有什么优缺点

古月木易

django flask tornado

大厂经验(4):iOS端埋点自动采集技术原理剖析

DeeperMan

ios 前端 数据采集 埋点

第八周作业

田振宇

实战:docker搭建FastDFS文件系统并集成SpringBoot

生命在于折腾

springboot

QQ音乐PB级ClickHouse实时数据平台架构演进之路

小小的一朵云

大数据

秒杀全网!研发、运营必备实用工具网站

程序员生活志

工具类网站

计算机网络基础(十)---网络层-迪杰斯特拉算法

书旅

算法 计算机网络 网络 最短路径

如何成为一个成功的首席数据官

尹千觞

Flink 1.11 SQL 使用攻略

Apache Flink

flink

NameNode和SecondaryNameNode工作机制

奈学教育

NameNode

LeetCode题解:142. 环形链表 II,JavaScript,快慢指针,详细注释

Lee Chen

LeetCode 前端进阶训练营

week08 总结

Z冰红茶

乘商用之风,破后疫情之浪:丁耘分享华为如何持续护航5G新价值

脑极体

如何设计一个亿级消息量的IM系统

Chank

Java Architecture Architect IM Instant Messaging

4. JSON字符串是如何被解析的?JsonParser了解一下

YourBatman

Jackson JSON库

将Arch Linux安装到U盘

Kurtis Moxley

Linux 安装操作系统

到底一台服务器能够支持多少TCP并发连接?

南方有乔木兮

池化技术到达有多牛?看了线程和线程池的对比吓我一跳!

王磊

Java

腾讯“神盾-联邦计算”平台带你翻越数据合作的重重大山

小小的一朵云

大数据

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

周桂华:我的小游戏开发之路(上)-InfoQ