【问题标题】:XNA 4 and External ReferencesXNA 4 和外部参考
【发布时间】:2011-02-26 13:52:20
【问题描述】:

我试图实现类似于 Shawn Hargreaves 博客上的外部引用示例的东西

http://blogs.msdn.com/b/shawnhar/archive/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer.aspx

我遇到的问题是,当 VS 尝试编译 xml 文件时,它会抛出类似的错误

错误 1 ​​构建内容抛出 ArgumentException:外部参考“C:\Work\Company\Project\trunk\Project.Content\Sprites\Effects\EffectsSprite.tga”不是已编译的 .xnb 文件。 在 Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentWriter.WriteExternalReference[T](ExternalReference1 reference) at Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ExternalReferenceWriter1.Write(ContentWriter 输出,ExternalReference1 value) at Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentTypeWriter1.Write(ContentWriter 输出,对象值) 在 Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentWriter.InvokeWriter[T](T 值,ContentTypeWriter 编写器) 在 Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentWriter.WriteObject[T](T 值) 在 Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentWriter.WriteSharedResources() 在 Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentWriter.FlushOutput() 在 Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentCompiler.Compile(流输出,对象值,TargetPlatform targetPlatform,GraphicsProfile targetProfile,布尔压缩内容,字符串根目录,字符串引用重定位路径) 在 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.SerializeOutputAsset(BuildItem 项,对象assetData,字符串输出文件名) 在 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.SerializeAsset(BuildItem 项,对象assetData) 在 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem 项) 在 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAsset(BuildItem 项) 在 Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.RunTheBuild() 在 Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy.RunTheBuild(BuildCoordinatorSettings 设置,TimestampCache timestampCache,ITaskItem[] sourceAssets,String[]& outputContent,String[]& rebuiltContent,String[]& 中间体,Dictionary@ 987654324@2[]& 警告)C:\Work\Company\Project\trunk\Project.Content\Sprites\Effects\AtlasAuto.xml 项目

我应该如何处理 Xml 文件引用的文件?鉴于它与 xml 文件位于同一文件夹中, 我尝试过:

  1. 包含在内容项目中并使用 Texture - XNA 框架对其进行处理,
  2. 将其从项目中排除并
  3. 不要构建文件,而只是将其作为内容复制...

似乎没有任何效果。我想知道该示例是否适用于 XNA4,或者是否适用于 XNA3,并且他们改变了它在 XNA4 上的工作方式...

有什么想法吗?

【问题讨论】:

    标签: c# xna xna-4.0


    【解决方案1】:

    没有看到XML和项目布局很难说,但我相信它可能是这样的:

    您的方法看起来不错,但问题是您还需要构建此纹理文件。 ExternalReference 可以指向源文件(例如 .jpg 或 .fx),也可以指向已编译的 .xnb 文件。通常,您希望在管道开始时进入的数据指向源文件,但从另一端出来的数据需要指向已编译的 .xnb 文件,因此可以将这些文件加载​​到您的游戏中。 完成此操作的最常见方法是使用自定义处理器,该处理器接收对源资产的引用,要求编译此资产,并将引用更改为指向其编译后的版本。例如(在处理器中): material.Texture = context.BuildAsset<TextureContent, TextureContent>(material.Texture, "TextureProcessor");

    在此处引用(在第二篇文章中): http://forums.create.msdn.com/forums/t/44917.aspx

    【讨论】:

      【解决方案2】:

      我怀疑 xml 内容中的外部引用不能指向源资产。

      1. 确保被引用的项目也包含在内容项目中。
      2. 名称中不要包含文件扩展名。
      3. 它的路径应该是相对于 xml 文件的位置(我不是 100% 确定,如果这不能找到它也尝试相对于内容项目的根目录)。

      【讨论】:

        猜你喜欢
        • 2013-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-26
        • 2011-06-01
        相关资源
        最近更新 更多