专栏首页游戏杂谈手游的一些事儿 - 动态更新

手游的一些事儿 - 动态更新

标题本来想叫“手游那些事儿”,想了想还是算了,不想盗用“明朝那些事儿” 的“招牌”(其实还是有盗用的嫌疑,哈哈)。

为了抹掉打广告的嫌疑,这里暂以已经比较火的或者腾讯出品的游戏举例(外加吐槽)

腾讯的《游龙英雄》

游久的《酷酷爱魔兽》

腾讯的《怪物弹珠》

目前国内手游2d开发以cocos2d-x js/lua为主流,3d多使用unity3d,类似网易这种做过端游的游戏厂商则倾向于使用在端游已经成熟的引擎来进行开发。近期比较热门的如《太极熊猫》、《天龙八部》、《征途》等

最期cocos2d-x仅支持c++开发,不能动态更新是一个很头疼的问题,特别是上线苹果商店,首先是不确定审核是否通过以及审核的时长也不确定,一旦线上有重大bug需要修复或者新功能需要更新,就很麻烦了,需要再重新打一个包进行提交审核。

游戏支持动态更新,在推广上会有很大的优势,一定程度上降低了多版本维护的成本问题。但过份依赖动态更新就有问题了,比如上面的《游龙英雄》,一个apk包不到100M,一启动游戏就提示我要下载156.9M,吭哧吭哧又要等好久,好忧伤…

等好久能玩游戏也就罢了,《怪物弹珠》最恶心了,下载用了好久,然后更新又花了好才时间,没点几下就闪退了,闪退了有木有!!!

无论你采用什么引擎进行开发,如果不支持动态更新,那么推广上将会被大大折扣,评级亦会受到影响。而采用脚本语言相比c++而言有比较明显的优势:

1、人员招聘更容易(C++相对来讲难招一些,脚本语言比如lua上门很快);

2、产品稳定性有所提升(新手写c++一不小心就给你搞个野指针,然后游戏就闪退鸟,而绑定脚本的话,一定程度上避免了这种风险);

更新建议采用zip补丁包的方式,最大程度上减少下载包的大小(毕竟CDN的流量也是要钱买的,无论你是按峰值还是按总流量)。更新应当要有一套支持灰度发布的系统,比如目前公网的补丁包是1.zip,现在需要再更新一个补丁包2.zip,那么这个2.zip就需要在线上跑一下,我借用之前web开发的经验(使用Fiddler调试线上的网页),最初在内网环境下开发了一套灰度发布系统。

对于测试人员来讲,只需要点击网页上的一个按钮来开启预发布,然后就可以提前去下载最新的补丁包,之后连接测试服进行测试。如果关闭了预发布状态,那么你跟外网玩家所使用的包一样,通过一个按钮来控制整个灰度发布,在真机、外网环境下提前测试需要发布的内容。预发布环境的另外一个作用是,可以对服务器列表的显示进行过滤,比如现在默认配置了三组新服,但没有对外网玩家开放,这个时候测试人员就可以拿外网的包进入新配置的服务器进行测试。从方案到最终实现都是我一人完成,这一点我觉得还是值得骄傲的。目前不完善的地方在于,只认ip(通过ip来实现不同请求的重定向 -- url未跳转),未将设备的MAC加入到过滤条件中。

需要更新的资源最好使用版本控制的导出功能来完成(以方便回滚和问题追踪),同时更新的文件尽可能要小一些,比如在图片资源的处理上,android、ios使用的资源是不一样的。

IOS:

JPEG的图片(非背景)默认使用60的品质

JPEG的背景图片默认使用30的品质

PNG使用444 + 抖动的处理

Android:

JPEG的图片(非背景)默认使用30的品质

JPEG的背景图片默认使用20的品质

PNG使用TinyPNG进行处理

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Perl的File::Path模块删除非空文件夹

    不过那个只是针对单个的文件,使用unlink方法就可以了(未测试过只读文件删除的情况- -!),那如果要删除指定的一个文件夹,有三种方案:

    meteoric
  • 预加载JavaScript/CSS但不执行

    好吧,一个方案一个方案来分析一下(要求是不允许执行Javascript和应用CSS,以免消耗系统资源):

    meteoric
  • Flex的UI组件Tile

    Tile继承于容器类(Container),有三个属性:direction(子项在容器中的放置样式:水平、垂直)、tileHeight(子项的高度)、tileW...

    meteoric
  • 算法同学从学校到实习,需要改变什么

    自从2016年谷歌的AlphaGo战胜了世界围棋冠军李世石之后,企业对于人工智能和算法的岗位越来越重视,使得算法岗也越来越被大学生所重视,很多同学到开始加入到转...

    黄鸿波
  • Linux系统LVM逻辑卷工作原理,必看~

    其实在Linux操作系统中,磁盘管理机制和windows上的差不多,绝大多数都是使用MBR(Master Boot Recorder)都是通过先对一个硬盘进行分...

    马哥linux运维
  • Android 项目代码质量保证实践

    一个项目开发必然会涉及团队协作,而工程质量就需要团队去保证。一般我们期望的代码:无潜在风险、无重复逻辑、风格无差异、可阅读性好、新人上手速度快等。为了达到上述目...

    小老鼠
  • 每天一道面试题(15)

    通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面...

    剑走天涯
  • 剑指Offer的学习笔记(C#篇)-- 序列化二叉树

    二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的转换。将二叉树中的没...

    WeiMLing
  • kaggle 图像分类竞赛实战(一):数据集下载和清洗

    本文集以 Kaggle 网站真实竞赛《dogs-vs-cats-redux-kernels-edition》为主线,讲解如何使用深度学习技术解决图像分类问题。本...

    我是一条小青蛇
  • 剑指offer(47-67题)终极篇

    思路: 这题首先要理解题意吧。题目就是给了两个操作,insert和FirstAppearingOnce两个函数,至于一些其他需要你自己实现。你可以选择字符数组、...

    bigsai

扫码关注云+社区

领取腾讯云代金券