【问题标题】:XNA: Determine content name from source file pathXNA:从源文件路径确定内容名称
【发布时间】:2016-04-24 07:09:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# xna pipeline


    【解决方案1】:

    正确的解决方案是使用(没有详细记录的)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&lt;T&gt; 问题的来源。

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      相关资源
      最近更新 更多