Project1

标题: 有没有能自动删除无用素材的工具 [打印本页]

作者: lianran123456    时间: 2015-8-18 23:32
标题: 有没有能自动删除无用素材的工具
我记得以前在论坛中看到过那样一个工具,可以自动把游戏中没有用到的东西删掉。
我记得好像是小黄鸡fux2做的,然而我现在找不到了orz
帮忙发一下,谢了!
作者: 墨凌羽    时间: 2015-8-19 00:10
嗯 有一个叫素材库的东西 所有的素材分门别类放在素材库里 然后游戏里的所有资源载入实际上都是载入素材库里的东西 然后游戏发布的时候运行一个叫打包器的东西 会把所有载入了的素材给移动到工程目录下 嗯 这样应该不错
PS:功能应该实现起来应该不难 然而关键的是这个“分门别类”即标准/规格的制定与划分
@晴兰  兰触怎么看?有什么黑科技不?
作者: 喵呜喵5    时间: 2015-8-19 00:44
墨凌羽 发表于 2015-8-19 00:10
嗯 有一个叫素材库的东西 所有的素材分门别类放在素材库里 然后游戏里的所有资源载入实际上都是载入素材库 ...

显示图片肯定要走Bitmap播放声音肯定要走Audio,调用时记录一下,接着作者完整的跑一遍游戏,整个游戏素材表就全列出来了,要什么黑科技
作者: 墨凌羽    时间: 2015-8-19 02:30
本帖最后由 墨凌羽 于 2015-8-18 20:35 编辑
喵呜喵5 发表于 2015-8-18 18:44
显示图片肯定要走Bitmap播放声音肯定要走Audio,调用时记录一下,接着作者完整的跑一遍游戏,整个游戏素 ...


@三途亚梦 问题并不是我不想给游戏做测试,而是这两件事不能同时干。
测试游戏时,游戏的结构是不确定的,因为你很有可能会在下一刻改变整个游戏的结构什么的(没有达到预期)。如果边测试边提取的话,最后就是把你在测试游戏的过程中引入的不必要的资源也提取出来。

至于分析代码来提取资源,好处显而易见,然而麻烦的是,对于通过变量来加载的资源很难去判断,最好的解决办法就是写词法分析、语法分析什么的(然而太过黑科技,实现难度太大)。其余的一些办法是通过一些约定来解决变量加载的问题:
第一种:直接限制通过变量加载(然而是不可能的,这样太多的东西就没法写)
第二种:数据和逻辑分离,例如RM原版工程,所有资源路劲都是保存在外部数据里,代码里没有硬嵌资源路径。这样只需要分析外部资源加载表就可以了。问题是成本太高(虽然相较于直接写词法分析/语法分析简直小case),单人/小工程没必要。
第三种:强制加载资源的时候,写上后缀。一般来说资源路径都是保存在字符串里,先提出代码里的字符串,然后做字符串匹配,只有带有特定后缀的(如.png.jpg.ogg)字符串才会被认定为是资源路径,然后再去加载。然而问题是对于:
  1. 10.times{|i| @src.push("xx#{i}.png")}
复制代码
这类含有内嵌变量的处理无能。
第四种:对用于表示资源路径的变量进行标记(加前缀or后缀)然后根据这个前缀or后缀进行捕获。然而而问题是,三存在的问题它也存在,同时对于这个用于表示资源路径的变量,如果是hash、array等复杂数据结构,也会很难/无法处理。

由此来看,通过边测试边提取资源的方式,虽然会在提取的时候多点东西,但总好过分析代码这种会造成丢失的方法要好些。再鉴于一般人也都是小工程,没必要折腾太复杂的玩意。所以这种边测试,边提取的方法是最适合。

不过,对于熟悉ruby,自己平时就写脚本的,完全可以用分析脚本+强制带后缀的方式来解决。一般来说内嵌变量的动态资源加载出现的几率不是很高,少数出现的部分,也可以靠人工的方式来解决。

另外,对于较大的复杂工程,且存在动态资源加载等的项目,可以考虑将所有资源抽象到资源表里(参照RM的处理办法)。到时只需要对资源表进行分析然后提取就行。

最后综合的说,最适合普通大众的即插即用的就应该是边测试变提取的办法;而对于会脚本的个人使用完全可以通过代码分析+部分手动提取来做到精确提取(对于通过手工修正自动提取的情况,明显在少加载的时候分析代码然后补充,要比多加载然后分析代码去删除方便得多。因为你多加载的话得先分析全部然后去看那些是多加载的,而少加载的话只需要去分析哪里少加载了就行而不用分析全部。另外边测试变加载的时候,每次做测试都有个资源加载的过程,这样会特别麻烦。);而对于大型复杂项目,则最好做到代码和数据分离,通过资源表/外部配置模块去加载资源。

作者: 冷峻逸    时间: 2015-8-19 07:17
提示: 作者被禁止或删除 内容自动屏蔽
作者: taroxd    时间: 2015-8-19 11:15
墨凌羽 发表于 2015-8-19 02:30
@三途亚梦 问题并不是我不想给游戏做测试,而是这两件事不能同时干。
测试游戏时,游戏的结构是不确定的 ...

说实话,动态加载很常见的。比如 sideview,比如我的 ulds
作者: 鑫の尘埃    时间: 2015-8-19 20:27
= =一般都是要什么就拉什么进来吧..
那有删除呢...




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1