页游资源的管理方法

1.   配置文件压缩

页游需要10几,20几个配置文件这是很常见的,配置文件现在流行使用xml格式。可以通过压缩软件打包,flash通过二进制方式加载压缩包之后解压使用。这样一方面减少连接请求数另一方减少了流量

2.   资源细化分离,按需加载

分离各类模块和素材(图片、swf文件),方便实现按需加载。整个游戏的资源size很大,但是进入游戏往往并不需要所有的资源。这样我们可以分离各类模块和素材,所有资源通过配置文件管理。整理出进入游戏需要的必加载资源,剩余资源只在需要的时候再加载,以减少进入游戏的时间。分离各类模块和素材,还要一个好处就是减少单个资源的size,降低资源下载失败的情况

按需加载的流程如下:

l  判断资源是否可用(是否已经加载过);

l  如果已经加载,直接使用即可;

l  否则加载资源,下载完成后才使用。

这里有点需要注意 – 如何判断一个资源是否已经加载过?一般加载过的资源,我们会缓存在内存中(这样下次使用资源无需再次加载),加载过的资源使用一个Dictionary管理(以资源url为key,资源内容为值。注意不用使用数组保存资源,使用字典会比遍历数组查找名称快很多),通过资源url就可判断资源是否已经加载过。或者通过applicationDomain.hasDefinition(className),查找资源中的链接类是否可以在应用程序域中找到,因为加载通常会制定一个应用程序域,加载过的资源可以直接从域中读取。

我做过的几个游戏进入游戏必加载资源必须尽量小,这样可以保证玩家可以快速进入游戏,这也是一个硬性指标,按需加载是必须的!

3.   按模块加载

模块细化:按照程序逻辑,游戏可以拆分出多个模块,如“登陆模块”、“副本模块”、“任务模块”、”关系链模块“等等;按照游戏中的关卡或场景,可以拆分出不同的“场景模块”。这些模块不是主程序运行必须的,只在需要的时候加载。

这点其实跟第二点“按需加载”是一样的,这里更关注游戏如何进行模块划分使得程序可以按需加载。模块划分主要包括“核心模块划分”和“子模块划分”。核心模块的划分思路是这样的:它们是游戏启动所必须的,相互之间是紧密联系的,还要经常的被子模块调用;而相对的,子模块的划分思路是:他们在游戏启动过程中不是必须的,可以在游戏过程中再加载,子模块相互之间基本上完全没有联系,一个子模块的增加和删除不会影响到任何其他子模块,子模块可能需要调用主程序的接口或者获得主程序的数据,但主程序绝对不应该依赖某个子模块。

明确了模块划分思路再具体看看哪些部分应该划分为核心模块,哪些部分应该划分为子模块。一般情况下,核心模块按照游戏启动顺序大致包括: 加载壳SWF → 登录注册SWF → 灰度控制文件 → 主程序SWF → 配置文件包 → 公共素材包 → UI需要的资源 

注:

l  加载壳SWF一般很小(50K左右,小于100K),只包含2个功能:1)登录注册、灰度控制;2)加载主程序swf。加载完主程序swf,加载壳就完成自己的工作,主程序swf接管程序控制权。尽量最小化加载壳的功能,以保证调整或增加功能不用修改加载壳。

l  接入第三方平台时,如腾讯,”登录注册SWF“不需要,统一使用页面登录框。

l  公共素材包,除了抽取的普通资源swf包,还可以是共享库的形式:UI共享库、Font字体共享库。

l  把公告素材包、主UI需要的资源放在”注程序SWF“之后,否则需要把配置文件包、加载公共资源等工作放到加载壳中去做。如果其中使用到的公用类被修改、项目运营中频繁运营造成修改配置文件和资源管理方式,加载壳就得重新编译发布,违反了”最小化加载壳的功能“规则。

4.   资源缓存

Flash页游可用的缓存有以下几种形式:内存、浏览器缓存、ShareObject (flash特有的)。游戏查找资源,通常按照:内存 ==> ShareObject / 浏览器缓存 ==> 服务器的顺序检查。缓存的使用可以给玩家非常好的体验(只在第一次加载时耗时久),这样整体游戏会感觉流畅,不会每次切换场景等都要等待从服务器加载资源的时间。

前面介绍过一般加载过的资源,我们会缓存在内存中(这样下次使用资源无需再次加载),加载过的资源使用一个Dictionary管理。但是内存资源是有限且宝贵的,通常只驻留常用的资源。对于其他资源,这时ShareObject / 浏览器缓存就很有用,比从服务器拉取速度快、并且节省流量。

4.1.   浏览器缓存

关于浏览器缓存可以参考文章:浏览器缓存机制。(http://goo.gl/SaHt0)

4.2.   ShareObject

这里需要理解下为什么有了浏览器缓存,as3还搞个ShareObject虽然有浏览器缓存,但实际上这种缓存持续不了几天,因为浏览器一向都有最大缓存限制。一般你看几个视频,这个缓存空间就消耗得差不多了。为了不让Flash加载的文件缓存被冲洗掉,你可以将加载的文件的二进制数据(Loader是contentLoaderInfo.bytes,URLLoader则要用二进制方式加载获取其data属性)保存在ShareObject里,并添加版本号以便更新,下次加载就直接取这个数据。这个操作会请求大量ShareObject空间,因此FLASH会弹出提示让用户确认(ShareObject默认是100K的大小,超过这个大小需要用户确认)。如果你担心用户不确认,可以在游戏其他地方向用户说明情况并要求他们点击确认按钮,现在已经有很多MMO页游这么做了。


Shareobject示意


var so:SharedObject = SharedObject.getLocal("resName_v1");

if (so.size == 0)

{

    // 共享对象不存在。

    trace("created...");

so.data.res = bytes;

so.data.ver = “v1”;

}

trace("SharedObject is " + so.size + " bytes");

so.flush();

5.   资源预加载

空闲的时候,预加载核心资源;或者根据玩家特点预加载需要的资源。

l  根据玩家的操作,预判下一步要做的操作,预加载相应资源,这个要具体游戏具体分析。

l  帮核心玩家预加载所有核心资源。如核心QQ农场玩家同时会玩QQ牧场,并经常在这2个模块之间切换,在玩家进入QQ农场空闲时预加载牧场的资源。

资源预加载技术上不难,关键是要找到合适的时间,加载对的资源。

6.   使用CDN加速

关于CDN-内容推送系统可以文考文章:CDN-内容推送系统(http://goo.gl/H7Llw)。 现在我所在公司所有的页游都使用CDN技术。CDN技术也在各大门户网站实践使用。

关于CDN加速页游其实和加速网站差不多,参考方案:《网页游戏加速解决方案交流》(百度文库)。

原文来自:技术之家

时间: 2024-10-10 20:14:45

页游资源的管理方法的相关文章

页游中资源版本更新问题之解决方案

因为很多浏览器的缓存非常顽固,比如IE浏览器,所以在页游中经常会出现一个资源无法及时更新的问题. 比如你更新了背包的资源,是一个swf资源,你把它上传到服务器下面.可是因为缓存的原因,页游运行过程中可能还会运行老的背包swf资源,这样就出现了无法及时更新的问题. 业内常见的解决方案是使用版本号: 1,首先你要新建一个资源xm,里面放的是是各个资源(比如背包swf资源)的版本号,比如1.0. <?xml version="1.0" encoding="UTF-8"

手游、页游和端游服务端的架构与区别

GameRes游资网发布, 文 / 韦易笑 手游页游和端游的服务端本质上没区别,区别的是游戏类型. 类型1:卡牌.跑酷等弱交互服务端 卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器: 登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当前时间戳还有服务端私钥,计算哈希得到的加密 key 并发送给客户端.之后双方都用 HTTP通信,并用那个key进行RC4加密.客户端收到key和

手游页游和端游的服务端的架构与区别

转自:http://www.gameres.com/336666.html 手游页游和端游的服务端本质上没区别,区别的是游戏类型. 类型1:卡牌.跑酷等弱交互服务端 卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器: 登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当前时间戳还有服务端私钥,计算哈希得到的加密 key 并发送给客户端.之后双方都用 HTTP通信,并用那个key进

操作系统内存管理——分区、页式、段式管理

计算存储的层次结构: 当前技术没有能够提供这样的存储器,因此大部分的计算机都有一个存储器层次结构,即少量的非常快速.昂贵.易变的高速缓存(cache):若干兆字节的中等速度.中等价格.易变的主存储器(RAM):数百兆或数千兆的低速.廉价.不易变的磁盘.这些资源的合理使用与否直接关系着系统的效率. 1. 内存管理方法 内存管理主要包括虚地址.地址变换.内存分配和回收.内存扩充.内存共享和保护等功能. 2. 连续分配存储管理方式 连续分配是指为一个用户程序分配连续的内存空间.连续分配有单一连续存储管

JavaEE学习之Spring Security3.x——模拟数据库实现用户,权限,资源的管理

一.引言 因项目需要最近研究了下Spring Security3.x,并模拟数据库实现用户,权限,资源的管理. 二.准备 1.了解一些Spring MVC相关知识: 2.了解一些AOP相关知识: 3.了解Spring: 4.了解Maven,并安装. 三.实现步骤 本示例中使用的版本是Spring Security3.2.2.通过数据库实现Spring Security认证授权大致需要以下几个步骤: 1.新建maven web project(因为本示例使用的是maven来构建的),项目结构如下,

Xilinx FPGA全局时钟和全局时钟资源的使用方法

对FPGA的全局时钟了解不多,遂转载一篇文档: http://xilinx.eetop.cn/?action-viewnews-itemid-42 目前,大型设计一般推荐使用同步时序电路.同步时序电路基于时钟触发沿设计,对时钟的周期.占空比.延时和抖动提出了更高的要求.为了满足同步时序设计的要求,一般在FPGA设计中采用全局时钟资源驱动设计的主时钟,以达到最低的时钟抖动和延迟. FPGA全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元

【转】一个java页游服务器框架

源地址:http://www.cnblogs.com/metoy/p/4305326.html?utm_source=tuicool&utm_medium=referral 一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简单的测试用的注册登陆功能.但在此框架中添加相应的业务逻辑也是比较轻松的,只需要添加相应的协议,编写对应的消息处理器即可. 下面

[unity3d]手游资源热更新策略探讨

原地址:http://blog.csdn.net/dingxiaowei2013/article/details/20079683 我们学习了如何将资源进行打包.这次就可以用上场了,我们来探讨一下手游资源的增量更新策略.注意哦,只是资源哦.关于代码的更新,我们稍后再来研究.理论上这个方案可以使用各种静态资源的更新,不仅仅是assetbundle打包的. (转载请注明原文地址http://blog.csdn.net/janeky/article/details/17666409) 原理 现在的手游

页游手游服务器(一)

把工作几年服务器相关的部分内容,通过服务器解决方案,做一次总结.整个实现的主体是lua脚本,lua实现主要缺少的两大块:1网络部分2数据库部分这两部分必须通过c/c++做扩展先来做net,主要是服务器net,和客户端net.服务器发起连接的情况主要是用于和平台验证,上报之类的,还有服务间通信,接口如下:_connect(ip, port, onconnect, onclose, timeout)参数:ip,地址port 端口onconnect 连接上的回调onclose 关闭的回调timeout