您的位置:首页 > 其它

游戏中避免重复资源加载,解决资源重复加载的方法

2014-07-14 22:39 176 查看
今天碰到一个非常头痛的问题,就是在游戏中我们要加载一些资源,加载完成之后,我们又去加载一次或者多次,系统出于的安全和性能的考虑,对于已经加载的资源,不会重新加载,而我们又去加载,就会报错。那怎么解决资源重复加载问题呢或者避免重复加载问题?

刚开始我是这样想的,用一个全局变量比如public static var hashMap:HashMap,去对每一个加载的资源进行判断,标志,如果加载之后,就进行标志,说明已经加载当再次加载时就去检查是否已经加载。如果是就跳过,否则就去执行加载。可是遇到一个大问题就是,什么时候初始化这个全局变量,是在开头还是加载之后。先来说,加载之前。比如这样写

Var isLoad = false; load(){加载资源.........isLoad = true;} 这样就标志了资源已经加载。这这个只能对一个资源进行判断。如果是对多个资源进行判断,应该加一个列表。这个是一个方案。但是要注意一个问题,程序放的位置很关键,有时执行的结果是一样的,但是遇到的麻烦可能是非常的不同。比如说这个资源加载判断,假如我把isLoad 这个标志变量放到load()函数的外边,那么可能你的这个isLoad = true; 就可能永远不会执行,为什么呢。状态模式中遇到的,我简单说明一下。A 、B是两个状态,并且都是通过load这个函数进行切换状态,假如我现在想从A的状态到B的状态,执行load()跳转到B的状态,今天B有点发疯,又回会到A的状态,两个类呢,今天玩high了,就不断的来回切换,这个就类似的是死循环,而死循环的外边就是isLoad = true;这个状态标志,而因为两个类A、B都是在来回切换,导致标志没有被改变。最好的方法就是写在方法内部,而不要写到方法外部,这可以避免遇到永远执行不到的问题,这个我可是搞了大半天还搞不定,所以大家,写代码还是多思考一点,状态切换都是在哪里切换。有没有遇到不会执行的情况。

针对这个问题我还去网上搜索一下,到底还没有其他的方法,网友还真给力。给出了几种不同的方案,但是呢都是差不多,以为语言的差异,就不针对代码,只是说一下大体的思路。

① 给每个资源设置一个函数库。

加载任务的时候,给这个库添加一个函数。如果此时资源未加载就去加载(然后在加载完后执行库里面的函数),如果已经加载就执行函数库里面的函数。库里面的函数执行完一个就删一个。

② 字典保存法,相当与全局变量的当时

用队列加载,加载完了哪一个,保存到dic里。逐个遍历查询

③ 加载类的定义。这个数的不是很清除

不要直接使用加载的资源。实际上游戏的加载资源大多数都是为了获取资源的类定义,在使用的时候通过类定义去创建资源。频繁去加载重复的东西是完全没有必要的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: