赞 | 0 |
VIP | 0 |
好人卡 | 1 |
积分 | 0 |
经验 | 3404 |
最后登录 | 2017-9-13 |
在线时间 | 784 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 48
- 在线时间
- 784 小时
- 注册时间
- 2013-1-4
- 帖子
- 1102
|
本帖最后由 墨凌羽 于 2015-8-18 20:35 编辑
喵呜喵5 发表于 2015-8-18 18:44
显示图片肯定要走Bitmap播放声音肯定要走Audio,调用时记录一下,接着作者完整的跑一遍游戏,整个游戏素 ...
@三途亚梦 问题并不是我不想给游戏做测试,而是这两件事不能同时干。
测试游戏时,游戏的结构是不确定的,因为你很有可能会在下一刻改变整个游戏的结构什么的(没有达到预期)。如果边测试边提取的话,最后就是把你在测试游戏的过程中引入的不必要的资源也提取出来。
至于分析代码来提取资源,好处显而易见,然而麻烦的是,对于通过变量来加载的资源很难去判断,最好的解决办法就是写词法分析、语法分析什么的(然而太过黑科技,实现难度太大)。其余的一些办法是通过一些约定来解决变量加载的问题:
第一种:直接限制通过变量加载(然而是不可能的,这样太多的东西就没法写)
第二种:数据和逻辑分离,例如RM原版工程,所有资源路劲都是保存在外部数据里,代码里没有硬嵌资源路径。这样只需要分析外部资源加载表就可以了。问题是成本太高(虽然相较于直接写词法分析/语法分析简直小case),单人/小工程没必要。
第三种:强制加载资源的时候,写上后缀。一般来说资源路径都是保存在字符串里,先提出代码里的字符串,然后做字符串匹配,只有带有特定后缀的(如.png.jpg.ogg)字符串才会被认定为是资源路径,然后再去加载。然而问题是对于:- 10.times{|i| @src.push("xx#{i}.png")}
复制代码 这类含有内嵌变量的处理无能。
第四种:对用于表示资源路径的变量进行标记(加前缀or后缀)然后根据这个前缀or后缀进行捕获。然而而问题是,三存在的问题它也存在,同时对于这个用于表示资源路径的变量,如果是hash、array等复杂数据结构,也会很难/无法处理。
由此来看,通过边测试边提取资源的方式,虽然会在提取的时候多点东西,但总好过分析代码这种会造成丢失的方法要好些。再鉴于一般人也都是小工程,没必要折腾太复杂的玩意。所以这种边测试,边提取的方法是最适合。
不过,对于熟悉ruby,自己平时就写脚本的,完全可以用分析脚本+强制带后缀的方式来解决。一般来说内嵌变量的动态资源加载出现的几率不是很高,少数出现的部分,也可以靠人工的方式来解决。
另外,对于较大的复杂工程,且存在动态资源加载等的项目,可以考虑将所有资源抽象到资源表里(参照RM的处理办法)。到时只需要对资源表进行分析然后提取就行。
最后综合的说,最适合普通大众的即插即用的就应该是边测试变提取的办法;而对于会脚本的个人使用完全可以通过代码分析+部分手动提取来做到精确提取(对于通过手工修正自动提取的情况,明显在少加载的时候分析代码然后补充,要比多加载然后分析代码去删除方便得多。因为你多加载的话得先分析全部然后去看那些是多加载的,而少加载的话只需要去分析哪里少加载了就行而不用分析全部。另外边测试变加载的时候,每次做测试都有个资源加载的过程,这样会特别麻烦。);而对于大型复杂项目,则最好做到代码和数据分离,通过资源表/外部配置模块去加载资源。
|
|