游戏开发:通过路径搜索优先级来进行补丁升级(从端游到手游)

在我们的游戏开发中,在线升级是必须要解决的需求,你不可能每出一个版本,就让用户去官网下载吧。 特别是资源的更新。

假设我们的游戏由两个东西组成 game.exe  res.zip

见名知意,game.exe是游戏主程序,res.zip是资源包

那,我们如何面对更新呢。

首先想到的就是,当我们的game.exe启动后,我们会去下载PATCH服务器取得更新列表,比如game.exe是否有更新,res_patch.zip包大小等信息。

拿到后,我们就进行下载,下载后的文件可以保存到  patches/目录下 (名字自己定)  比如

patches/game_v001.exe

patches/res_v001.zip

有了这个以后,首先,我们要解决的是game.exe自更新问题。由于game.exe在运行过程中,是不能进行自修改的。所以,当我们发现有game_xxx.exe等字样的时候,我们需要唤起另一个进程,这个进程可以是SHELL,也可以是写的一个 _patch.exe什么的东西。 它的作用,就是将game_v001.exe覆盖原来的game.exe,并启动game.exe

大概过程如下

game.exe检查更新

game.exe下载文件

game.exe发现自己有新版本,启动_patch.exe进程,并结束自己

_patch.exe使用game_v001.exe覆盖game.exe,并删掉game_v001.exe

_patch.exe启动game.exe,并结束自己

这样game.exe就完成了。

由于整个过程比较绕,许多游戏都是做了一个launcher.exe来专门负责这个事情。

下面来说说资源的更新

资源的更新也较为简单

直接根据新版本,强制修改res.zip内容就可以了,这个过程由launcher来负责。

上面是一个端游粗略的更新过程……。

同样的方案,我们用到手游上如何呢? 这就要求我们对手游的局限要了解

手机中,安装目录是没有写权限的,不管是IOS还是ANDROID。 其它系统不知道

因此,我们无法做到应用程序代码的自更新,也无法直接修改安装包中的资源

动态库的方案也无法做到代码自更新,因为IOS审核不过。 我们就没有必要为一个游戏搞两套方案了。

因此,如果代码出现了更新,就只能让用户去APPSTORE上重新下载了。

但是,我们依然要面临资源的更新,逻辑的更新问题。 如果小改一个BUG,或者小修一个图片,都要让用户重新下载。 这流失率估计就能上100%了。

面对逻辑更新问题,大部分团队选择了脚本作为纯逻辑开发,普通的C++,JAVA,OC代码,仅是做一些层底支持。这样一来,所有的问题,都折射到了资源更新上。

刚刚说了,我们无法修改安装包中的数据。 那,我们自己新开一个拥有可写权限的目录不就可以了么。

在IOS和ANDROID下面,都可以取得writablePath,或者cachePath来使用。

随之而来的问题,就是资源加载。比如,在安装包中,有一个 res/logo.jpg  现在,我在更新目录下也有res/logo.jpg文件。

如何加载呢。最直接的方法,就是记录一下,哪个资源,在哪个路径下。但这个功能,如果做在上层的话,那每一次取资源,都要用 getRealPath等字样来包装。 如果做到底层去的话,又觉得这个功能确实不太适合放到底层。

像cocos2dx这个引擎,你就得手工修改资源加载处的代码了。

对于这样的方案,我们可以使用引擎中较为常见的一个功能,就是引擎的路径系统。

路径系统允许用户设置多个路径,当加载一个资源时,它会按对应路径逐个匹配,直到找到它为止。 因此,如果你加载 一个图片 1.jpg 如果多个目录下有,且这些目录都被添加到路径系统中了的话,那处于最前面的路径会优先匹配,后面的文件夹永远没有机会被访问到。除非之前的路径被删除……

基于这一特性,我们可以制定出手游上的资源更新方案

在引擎中,我们可以规划两个路径,一个是UPDATE的存放路径,一个是安装目录的路径

每次加载资源,优先搜索UPDATE

像cocos2dx,irrlicht等引擎,都有这样的路径搜索机制,只需添加好就可以了。

至于具体的资源更新,就是下载一个列表,然后根据列表进行文件下载和替换就可以了。

对于手机游戏的资源要不要ZIP,这个根据个人需求。

值得一说的是,目前手机存储卡均采用闪存或者SSD,读写速度比PC硬盘快多了。文件分离,做累加更新,是非常方便的。 当然,如果你坚持使用端游的逐版本更新机制,也是没有任何问题的。

posted @ 2014-06-23 00:07 麒麟子(Alex) 阅读(...) 评论(...) 编辑 收藏

游戏开发:通过路径搜索优先级来进行补丁升级(从端游到手游)相关推荐

  1. 从萌新玩家到游戏开发,IEG首位女专家的升级之路

    我们为什么叫「递归」 "递归" (recursion) 是一种在程序设计语言中被广泛使用的算法.它有两大特点,一是调用自己,二是化繁为简.我们当中那些优秀的技术人又何尝不是如此?他 ...

  2. 游戏开发之路之“复刻或升级游戏”---地球末日生存

    复刻之路-第一周.第二周 〇. 初始游戏计划 1. 人员安排 2. 内容安排 3. 计划安排 初期: 中期: 一. 开发进度 1. 第一周 - 学习背包系统和成就系统原理 - 画万能Sprite 2. ...

  3. 无敌破坏王2口碑爆棚,从街游到手游你最爱哪款游戏呢?

    <无敌破坏王2>11月23日中国首映,时隔6年,拉尔夫带着云妮洛普再次回到观众视野,对于95年历史的迪士尼工作室第一部续集动画电影,带来了新的冲击和感动,看完后我只想说,迪士尼真的从来不会 ...

  4. 三七互娱 Java游戏开发工程师 面试(两轮技术+HR面)

    (2020春招补招,已拿到offer) 抱着投着试试看的心态去的 自己还是不太了解游戏开发 框架啊这些都没怎么问 比较重视基础知识,面的也基本都是基础知识 所以面完才发现自己太基础的知识反而一问三不知 ...

  5. 【论坛】游戏开发大板上线公告

    尊敬的CSDN用户: 根据板块的访问量和用户需求,将[游戏开发]板块从原来小板升级为大板,并将大板调整至[硬件/嵌入式开发]大板下.下面是游戏开发板块导航树.   游戏开发 Cocos2d-x Uni ...

  6. live2dmesh渲染优先级_Cocos引擎_游戏开发引擎

    大家好,引擎组经过了近半年的努力,终于带来了 Cocos Creator 3.0 预览版.Cocos Creator 3.0 集成了原有 2D 和 3D 两套产品的所有功能,带来了诸多重大更新,将做为 ...

  7. 游戏开发中常用的数据结构和算法

    转载Loving_初衷 前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为 ...

  8. 游戏开发中的数据结构

    一.游戏程序的灵魂--算法 本系列文章的主题是网络游戏的程序开发,那么,程序是什么呢?一条著名的公式给了我们答案: 程序=数据结构+算法 程序语言(如C++)是一种工具,而算法是程序的灵魂. 数据结构 ...

  9. Unity3D游戏开发之网络游戏服务器架构设计培训

    下面我们开始今天的Unity3D游戏开发技能培训. 我们专业培养"游戏主程",挑战20W年薪,初期学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改 ...

最新文章

  1. 2022-2028年中国轻型输送带行业市场发展规模及市场分析预测报告
  2. 【Pandas库】(4) 索引操作--重新生成索引
  3. npm 发布包填坑指南
  4. C# 制作开机自动启动程序
  5. python判断sqlite连接状态_python3 自动识别usb连接状态,即对usb重连的判断方法
  6. gradle工作流程
  7. 《科学》公布2018十大科学突破技术
  8. 双向循环链表:鸿蒙轻内核中数据的“驿站”
  9. ~~二维差分(附模板题)
  10. 中图分类号,文献标识码,文章编号
  11. php rrd graph,使用lvs-rrd工具监控存储lvs状态信息
  12. led大屏按实际尺寸设计画面_新手必知LED显示屏尺寸规格及计算方法
  13. 开发者百度地图的使用,做一个小demo,ak秘钥,
  14. SuperSet连接mysql设置
  15. 十多个巨头App上可跑智能小程序了
  16. 飞机躲子弹小游戏案例
  17. 计算机教案三年级冀教版,冀教版小学三年级信息技术教案lbrack;画美丽的早晨rsqb;...
  18. CTF MISC在我眼里各种奇奇怪怪的题学习思路总结(持续更新)
  19. Flutter:Dialog弹窗设置点击空白处不关闭弹窗
  20. 写文本到txt文件的Sub过程

热门文章

  1. banq修复_banq的U盘如何?相比闪迪还有三星哪个最好?都是USB3.0
  2. 实现8086汇编编译器(三)——jmp指令的翻译
  3. 瑞萨IDE:CS+ for CC进行BootLoader升级时开发环境配置
  4. python 期货交易接口_量化交易 – 期货CTP接口与程序化(量化交易)的对接 1
  5. 可引导的MP3(U盘)
  6. 数据结构单链表实现班级考勤管理系统
  7. 如何判断集成墙面适不适合家庭装修?
  8. 小米5_2015201 2015618 2015628_官方线刷包_救砖包_解账户锁
  9. jetson agx xavier:从亮机到yolov5下tensorrt加速
  10. ARIMA预测未来的人口数量变化