XNA:从源文件路径

时间:2016-04-23 20:06:04

标签: c# xna pipeline

我目前正在实现Level内容类型,它应该代表游戏关卡内容(最重要的是,请参考单独存储的纹理)。输入级别数据包含源纹理资源的完整路径。

问题:如何确定结果内容"名称"我可以写出编译级别的内容吗?纹理应该被重用,因此将它们烘焙到关卡内容中是一个坏主意(浪费空间)。在内容创建期间(例如在关卡编辑器中)不可能提供名称。

举个例子:源文件Levels/Level01.level使用其完整路径名称引用Textures/Granite.pngTextures/Dirt.png。我想在编译时从该数据推断Textures/GraniteTextures/Dirt

1 个答案:

答案 0 :(得分:0)

正确的解决方案是使用(不是记录良好的)ExternalReference<T>类而不是纯字符串名称。

在作者方面,关卡内容对象包含ExternalReference<TextureContent>(甚至List<ExternalReference<TextureContent>>)实例。序列化(通过ContentWriter)时,这需要正确调整参考值。

读者的一方被简化为普通的ContentReader.ReadObject<>电话,例如

public sealed class LocationReader : ContentTypeReader<Location>
{
    protected override Location Read(ContentReader input, Location existingInstance)
    {
        List<Texture2D> textures = input.ReadObject<List<Texture2D>>();
    }
}

注意:注意正确覆盖编写器类中的GetRuntimeType()方法;这对我来说是奇怪的ReflectionReader<T>问题的根源。