我是代长新,来自上海享物说,主要负责游戏客户端研发。

享物说是一个大家可以互相赠送物品,有趣、不花钱的社区平台。为了创造更好的社区氛围,我们决定通过小游戏来增加社区的趣味性和互动性。

《乐享花园》是我们在小游戏领域的第一个实践。这个游戏,从立项到做完,准确的说是客户端做完,我们一共用了3天的时间。

但是,当时我们种花浇花、领水滴任务都是通过浏览器缓存实现的,如果要上线还要等服务端人员到位,否则玩家清理一下手机,自己种的花就没了。但等我们服务端人员到位,再到游戏上线,就是几周以后的事情了。

小游戏开发之痛:无法摆脱对服务端的依赖

相信,这也是大部分小游戏开发时会遇到的问题 —— 功能很简单,但就是摆脱不了对服务端的依赖。如下图:

具体来说,小游戏对服务端的依赖主要有以下两个方面:

1、微信接口只支持在服务端调用

这就意味着,我们必须为这些接口架设一个中转服务器。如果没有这个中转服务器,我们就没法做用户登录,没法获取用户头像、名称信息,也拿不到access_token,更没有办法调用其他微信接口,如内容审查。

2、游戏功能实现需要服务器开发

对于很多小游戏来说,我们唯一用到服务端的地方就是,储存当前的关卡进度,展示一个世界排行,就可以了。而想要实现这么一个简单的需求时,你会发现,隔行如隔山。

如何用云开发解决小游戏在服务端痛点?

1、云函数实现微信接口调用

曾经,我想过绕开服务器,直接通过客户端请求微信接口,结果踩了一个坑。

当时做的是聊天功能,需要对玩家发送的消息进行内容审查。我看完了接口文档,就跑过去跟服务器同学说,内容审查我这边全部做掉就可以,他那边不需要做额外的处理。

等我们调通,上了体验版,一打开报错,我才想起来,这个接口文档的上面,有一行小字,而且颜色是灰色的,上面写着:此接口应在后端服务器调用。

第一次看到这句话,还以为它只不过是一个警告,所以根本没把它放在心上,哪知道它居然是一个error!而在这之前,我还特意做了一些我认为比较人性化的设计,比如使用这个接口需要一个密钥,这个密钥是有有效期的,当密钥过期的时候,我会把玩家发送的内容保存起来,向后端拉取新的密钥后,再发送出去,这样对于玩家来说,整个过程是无感知的。而现在则意味着所有这些都要服务器去实现了。

后来,我通过云开发来实现多有接口调用,事情就简单多了。

就拿登录来说吧。

由于云函数具有微信天然鉴权的能力,可以直接返回openid,这一点对做登录确实很方便。乐享花园需要和享物说平台打通小红花积分数据,所以需要用户的unionid信息,这一步也是在云函数中实现的。

还有access_token,就是刚才用到的密钥,为什么要单独说这个密钥呢?因为它会用到云函数特别有意思的功能,那就是定时触发器。由于这个密钥是有两个小时有效期的,我们设定一个小时间隔定时刷新,保存到数据库中,用的时候直接从数据库中取出来就可以了,这样可以保证密钥永远是不过期的。

通过云开发,为微信接口准备的中转服务器就不需要了;更重要的是,服务端与微信接口分离,无需关心客户端场景。不管这个客户端,是来自h5游戏,还是来自小游戏环境,对于服务端来说,都是一样的,再也不需要为客户端提供这样那样的权限接口。

2、云函数+数据库,实现全局排行榜功能

正如前面提到的痛点,小游戏开发对服务端的另一个依赖是游戏功能的实现。对于大部分小游戏来说,我们唯一用到服务端的地方就是:保存用户数据,展示一个世界排行榜。而如果用传统服务器实现这些功能的话,你会发现需要了解的后端架构知识非常庞大。

有次,我到服务端同学的旁边,原本是打算diss他的,因为我功能已经写完了,他还不知道在忙些什么东西。这时我看到他在做什么呢 —— 一边写dockfile文件,一边写linux命令,一边打开Postman调试,完了后发邮件给运维说要执行几个mysql语句。

而所有这些都还没有涉及到他要开发的游戏功能!

所以说,一门后端语言从会写,到可以放到生产环境中,是两个完全不一样的概念。

云开发提供了数据库、云函数、云存储,通过这些能力,我们完全可以取代服务器来实现游戏功能。

在《乐享花园》里,我们通过云开发实现了全民成语接龙这个游戏功能,并且只用了2个云函数就实现了我们对服务器的全部需求。这里简单介绍一下这两个云函数:

第一个云函数是用来展示世界排行榜。由于云函数拉取数据库的条目是有限制的,最大是100条,其实这个已经足够满足需求了;当然了,你要说我们的客户端很牛,性能不是问题,数据什么的先给我来个2000条,也不是不可以,这里做个处理就可以了。

另外在检索数据库数据时,这个过程会很慢,一定要记得,在后台添加数据库索引,可以把这个过程理解为通过磁盘换取CPU计算。这样速度会快很多。


第二个云函数是用来上报玩家数据。这个比较简单,一行代码搞定。

就这样从微信接口调用,到游戏功能开发,一款不需要服务器的小游戏就全部开发完成了。

小结

其实,云开发可以使用的业务场景,还有很多,比如,

绕过微信https域名请求限制

存放游戏的全局设置

保存玩家的个性化数据

。。。

作为开发者,也希望云开发未来,可以提供更多的业务场景支持,比如

websocket,刚才说的聊天服务器,就可以省掉了;

帧同步,实时对战类游戏的实现,就不再有压力;

日志服务,方便统计,和排查玩家的行为,方便游戏迭代优化;

大数据统计分析,可以做一些事件漏斗等等~

这样小游戏的研发门槛,就降得很低很低了!

如果你有关于使用云开发TCB相关的技术故事/技术实战经验想要跟大家分享,欢迎留言联系我们哦!

(关注了我可以说是相当优秀了)

如何不用服务器来开发一个小游戏相关推荐

  1. 如何开发一个小游戏?其中有什么难点

    如果仅仅针对个人开发者来讲,要独立开发一款大型游戏几乎无可能,更大成功的可能还是开发一款类似<羊了个羊>这样洗脑的小程序游戏. 所以这里主要论述小游戏开发的情况,也就是小程序游戏,首先从小 ...

  2. 【h5白鹭引擎】如何快速开发一个小游戏

    1.环境搭建 安装教程传送门:http://edn.egret.com/cn/index.php?g=&m=article&a=index&id=207&terms1_ ...

  3. libGDX跨平台游戏开发框架入门:开发一个小游戏之加载资源

    目录 前言 加载资源 libGDX资源目录说明 配置各个平台启动器 desktop模块启动器设置 Android模块启动器设置 加速度计和指南针 html模块启动器设置 编写加载资产代码 1. 加载图 ...

  4. 用JavaFx开发一个小游戏

    老婆特喜欢一个叫做ColorLinez的小游戏,但这个叫做WinLinez的小游戏的界面实在太老了,而且很多老婆大人想要的功能都没有,因此我一直想给老婆亲手做一个,她想要的,谁让咱是程序员呢? 我目前 ...

  5. 使用pygame开发一个小游戏

    学习了pygame,身为一个IKUN所以,做了一个简单的小游戏.游戏规则是,使用键盘的方向键控制坤坤,当坤坤触碰到篮球,就会爆发出音乐"只因你太美".代码如下: import ra ...

  6. 如何开发一个小程序游戏?

    小程序游戏开发需要开发人员具备以下几点能力: 有一定的编程基础,例如 JavaScript.TypeScript 至少熟悉一种游戏开发引擎,比如 Cocos.Unity等 对游戏机制.游戏系统有一定的 ...

  7. 想开发微信小游戏,先看看腾讯是如何制定规则的

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 作者 | 凌华彬.王哲 责编 | 徐威龙 一.前言 在第一篇文章<微信小游戏开发上手& ...

  8. 表白小游戏教程:制作一个小游戏送给喜欢的TA(不会编程也能学会哦)

    大家好哇~ 欢迎翻开波波和阿菌的长篇故事~ 不过捏,今天我们不讲故事,今天将由阿菌和大家分享一个小教程:教大家制作一个小游戏,可以用来送给喜欢的人.无须任何计算机专业基础,只要能操作电脑,并在初一的数 ...

  9. python能制作游戏吗_如何用python写一个小游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...

最新文章

  1. java crontriggerbean_spring定时器----CronTriggerBean
  2. 如何在Leangoo中,为企业创建项目
  3. C# 指定格式的字符串截成一维数组(二维数组)的操作类
  4. 牛顿求平方根法(输入是double,输出也是double)
  5. Lync 小技巧-48-Lync 语音邮箱-英文提示-自动助理-中文提示
  6. cad高程如何提取到cass软件_建筑CAD软件中如何设置墙厚标注? - 数码区
  7. 大气的压力竟然能吊起相扑力士!?
  8. MySQL8.0.17 - 初探 Clone Plugin
  9. Kaggle新手银牌:Airbus Ship Detection 卫星图像分割检测
  10. 台达PLC-EH3.铆压机,3轴,Z轴(SMC)电缸下降的距 离用的是位置加扭矩模式,台达PLC MODBUS通讯控制台达A2伺服扭矩
  11. java与数据库连接odbc_详解java数据库连接之JDBC-ODBC桥连方式
  12. office2020与2016版的不同_Office哪个版本最好用?Office 2007/2010/2013/2016/2019/2020怎么选?...
  13. 地震数据爬取——Scrapy爬虫框架应用
  14. (梳理)用Tensorflow实现SE-ResNet(SENet ResNet ResNeXt VGG16)的数据输入,训练,预测的完整代码框架(cifar10准确率90%)
  15. 迟来的2015年终总结
  16. java实时获取android网速_Android实现网速实时监测工具类
  17. 测坐标天幕靶软件设计_测速天幕靶检定装置与检定方法
  18. Druid 监控配置
  19. CCF论文列表(2022拟定)大更新!MICCAI空降B类!PRCV空降C类!ICLR继续陪跑...
  20. vue引入jquery的方法

热门文章

  1. 08 redis数据类型:hash
  2. LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】
  3. POS消费机C#例子代码
  4. 微软起诉Google阻止前高管跳槽
  5. C++对自定义结构体变量排序
  6. CodeForces - 1607D Blue-Red Permutation(贪心)
  7. CodeForces - 528D Fuzzy Search(多项式匹配字符串)
  8. POJ - 1734 Sightseeing trip(最小环+输出路径)
  9. HDU - 1151 Air Raid(最小路径覆盖-二分图最大匹配)
  10. java数组缓冲_java – 何时使用数组,缓冲区或直接缓冲区