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

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

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, логическое значение compressContent, String rootDirectory, String referenceRelocationPath) в Microsoft.Xna.Framework.Content.Pipeline.BuildCoo rdinator.SerializeOutputAsset (элемент BuildItem, Object assetsData, String outputFilename) в Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.SerializeAsset (элемент BuildItem, Object assetsData) в Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem item) в 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[]& middles, Dictionary2& dependencyTimestamps, KeyValuePair2[]& warnings) C:\Work\Company\Project\trunk Проект \Project.Content\Sprites\Effects\AtlasAuto.xml

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

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

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

любая идея?


person smnbss    schedule 26.02.2011    source источник


Ответы (2)


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

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

Упоминается здесь (во втором сообщении): http://forums.create.msdn.com/forums/t/44917.aspx

person Nic Foster    schedule 17.01.2012

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

  1. Убедитесь, что элемент, на который делается ссылка, также включен в проект контента.
  2. Не включайте расширение файла в его имя.
  3. Его путь должен быть относительно местоположения файла xml (я не уверен на 100%, если это не найдет его, также попробуйте относительно корня проекта контента).
person James    schedule 15.10.2013