XNA 4和外部参考

时间:2011-02-26 13:52:21

标签: c# xna xna-4.0

我试图在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](ExternalReference 1 reference) at Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ExternalReferenceWriter 1.Write(ContentWriter output,ExternalReference 1 value) at Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentTypeWriter 1.Write(ContentWriter output,Object value )      在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()      at Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentCompiler.Compile(Stream output,Object value,TargetPlatform targetPlatform,GraphicsProfile targetProfile,Boolean compressContent,String rootDirectory,String referenceRelocationPath)      在Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.SerializeOutputAsset(BuildItem item,Object assetData,String outputFilename)      在Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.SerializeAsset(BuildItem item,Object assetData)      在Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem item)      在Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAsset(BuildItem item)      在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 []& intermediates ,词典2& dependencyTimestamps, KeyValuePair 2 []& warnings)C:\ Work \ Company \ Project \ trunk \ Project.Content \ Sprites \ Effects \ AtlasAuto.xml Project

我应该对Xml文件引用的文件做什么?鉴于它与xml文件位于同一文件夹中, 我试过:

  1. 包含在内容项目中并使用Texture - XNA Framework
  2. 处理它
  3. 将其从项目中排除,
  4. 不构建文件,只是将其作为内容复制...
  5. 似乎没什么用。我想知道这个例子是否适用于XNA4,或者它是否适用于XNA3并且它们改变了它在XNA4上的工作方式......

    任何想法?

2 个答案:

答案 0 :(得分:0)

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

  

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

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

答案 1 :(得分:0)

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

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