手游的一些事儿 - 动态更新
标题本来想叫“手游那些事儿”,想了想还是算了,不想盗用“明朝那些事儿” 的“招牌”(其实还是有盗用的嫌疑,哈哈)。
为了抹掉打广告的嫌疑,这里暂以已经比较火的或者腾讯出品的游戏举例(外加吐槽)
腾讯的《游龙英雄》
游久的《酷酷爱魔兽》
腾讯的《怪物弹珠》
目前国内手游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进行处理