XNA 4 и внешние ссылки - PullRequest
       7

XNA 4 и внешние ссылки

2 голосов
/ 26 февраля 2011

Я пытался реализовать что-то похожее на образец внешних ссылок в блоге Шона Харгривза

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, ExternalReference 1 value) at Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler.ContentTypeWriter 1.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, логический compressContent, строковый rootDirectory, String referenceRelocationPath) в Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.SerializeOutputAsset (элемент BuildItem, Object assetData, String outputFilename) в Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.SerializeAsset (элемент BuildItem, Object 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, промежуточный словарь, строка 1011 * 2 [] & предупреждения) C: \ Work \ Company \ Project \ trunk \ Project.Content \ Sprites \ Effects \ AtlasAuto.xml Project

Что я должен делать с файлом, на который ссылается файл Xml? Учитывая, что он находится в той же папке, что и XML-файл, Я пытался:

  1. включить в проект контента и обработать его с помощью Texture - XNA Framework,
  2. исключить его из проекта и
  3. не создавать файл, а просто копировать его как содержимое ...

Кажется, ничего не работает. Интересно, работает ли этот пример в XNA4 или для XNA3, и они изменили способ работы в XNA4 ...

есть идеи?

Ответы [ 2 ]

0 голосов
/ 15 октября 2013

Я подозреваю, что внешние ссылки внутри содержимого xml не могут указывать на исходные ресурсы.

  1. Убедитесь, что ссылка на элемент также включена в проект содержимого.расширение файла в его имени.
  2. Его путь должен быть относительно местоположения файла XML (я не уверен на 100%, если это не находит его, также попробуйте относительно корня проекта контента).
0 голосов
/ 17 января 2012

Трудно сказать, не видя XML и макет проекта, но я верю, что это может быть так:

Ваш подход выглядит хорошо, но проблема в том, что вам также нужно создать этот файл текстуры. ExternalReference может указывать либо на исходный файл (например, .jpg или .fx), либо, альтернативно, он может указывать на скомпилированный файл .xnb. Обычно вы хотите, чтобы данные, поступающие в начале конвейера, указывали на исходные файлы, но данные, поступающие на другой конец, должны указывать на скомпилированные файлы .xnb, чтобы их можно было загружать в вашу игру. Наиболее распространенный способ сделать это - использовать пользовательский процессор, который получает ссылку на исходный ресурс, запрашивает компиляцию этого ресурса и изменяет ссылку, чтобы указать на полученную скомпилированную версию. Например (в процессоре): material.Texture = context.BuildAsset<TextureContent, TextureContent>(material.Texture, "TextureProcessor");

Ссылка здесь (во втором посте): http://forums.create.msdn.com/forums/t/44917.aspx

...