0

我正在为 XNA 游戏构建内容编辑器,并且已经准备好内容阅读器和编写器。在我的编辑器中,我将遍历文件夹中的所有文件以在我的编辑器窗口中显示对象列表。我已经设置好了东西,但是在获取我的内容文件夹的文件列表后,我一直坚持要做的事情。

所有文件都有 XNB 扩展名,读取它们的唯一(非 hacky)方法是使用 XNA 内容阅读器。但是我想提前知道文件的内容类型(是地图还是游戏对象模板,还是我定义的许多其他类型的任何东西),而不是一个一个地加载它们并尝试加载每个对于每种可能的内容类型,这实际上是不可能的(或者说,有史以来最糟糕的编程实践)。

我怎样才能得到这样的功能:

ContentManager.ContentTypeOf(string assetPath);它返回一个类型,所以我可以提前知道在哪里加载(而不是加载)什么。仅仅为了编辑单个对象模板而加载游戏的所有地图并不是一个好主意。必须有一种实用的方法来区分内容文件的类型。

4

4 回答 4

1

也许有点晚了,但我遇到了同样的问题。

我只是使用了自己的内容处理器,在输出目录“[modelfilename].model”中添加了一个空文件。并在我的代码中枚举所有 *.model 文件,然后仅通过不带扩展名的文件名加载模型。如果需要,您还可以轻松地将更多信息放入该文件中。

自定义内容处理器的代码:

 string Name = Path.GetFileNameWithoutExtension(context.OutputFilename);
 FileStream fs = File.Create(Path.GetDirectoryName(context.OutputFilename) + @"\" + Name + @".model");
 fs.Close();
于 2011-12-16T14:06:58.757 回答
1

您可以访问 xnb 以获取内容阅读器名称。

这里是xnb 格式规范文件

于 2011-11-13T20:43:06.210 回答
0

好的,在没有找到任何实际读取文件的简单解决方案之后,我决定将文件组织到文件夹层次结构中,现在我知道什么文件是什么了。它至少完成了这项工作。可能不是最可行的解决方案,但它确实有效。

于 2011-11-29T00:21:24.760 回答
0

这很简单,只需将其加载为 type Object

Type type = content.Load<Object>("MyContent").GetType();

唯一的缺点是您必须加载整个资产才能确定其类型。

要为以这种方式加载的内容实现不同的生命周期策略,请考虑使用单独的ContentManager实例,甚至从受保护的方法派生您自己的类ContentManager并查看。ReadAsset

于 2011-11-14T12:01:51.280 回答