2012-01-29 3 views
3

Я пытаюсь построить демо TiledLib by Nick Gravelyn. Я скачал the ZIP from BitBucket и открыл его в Visual Studio 2010. Когда я пытаюсь построить, я получаю следующее сообщение об ошибке:Что такое сборка трубопровода в XNA 4?

Error XNA 4

По существу, эта ошибка для каждого из трех проектов:

Error 1 Error loading pipeline assembly "C:\Users\Moshe\Downloads\TiledLib_GS4\TiledLib GS4\References\ContentPipeline\TiledPipelineExtensions.dll". Demo [Windows]

I новичок в .NET, поэтому я уверен, что мне не хватает некоторых базовых понятий. Где можно ссылаться на эту зависимость, и почему сборка не загружается? Файл существует по указанному пути.

Что такое конвейер в XNA 4 и почему Visual Studio не может загрузить его?

+0

На эту сборку ссылается проект контента DemoContent. Этот контент-проект в вашем решении? Если да, посмотрите в своих ссылках, чтобы увидеть, хорошо ли это нахо- дится. –

+0

@ScottW - Размышление о раздумьях? Я не знаю, с чего начать проверять то, что вы говорите, чтобы проверить. – Moshe

+0

Обозреватель решений присутствует по умолчанию в правой части Visual Studio. Если его там нет, нажмите «Вид» -> «Обозреватель решений». Это покажет все ваши проекты (и информацию под каждым проектом при расширении). Проверьте проект «DemoContent». Если это так, разверните DemoContent и разверните папку «Ссылки». Вы должны увидеть TiledPipelineExtensions в качестве ссылки. –

ответ

5

Update: Для того, чтобы ваш проект содержимого, добавьте ссылку: TiledLib_GS4 \ TiledLib GS4 \ Ссылки \ ContentPipeline \ TiledPipelineExtensions.dll

Настройка конвейера контента сложная тема разработки игр, но это не сложно все (конечно, в зависимости от того, что и как вы обрабатываете контент).

Контент Pipeline - это серия шагов, которые выполняются для включения контента в вашу игру. Например, звуковой файл с волной обрабатывается через Контент Конвейера, чтобы вы могли использовать его в своей игре в качестве объекта SoundEffect. То же самое относится к изображениям, которые включены в вашу игру в виде текстур (либо Texture2D, либо Texture3D).

Когда вы загружаете контент, скажем, 2D-текстуру в вашей XNA-игре, используя Content.Load, вы вызываете импортер контента и процессор, которые уже определены в рамках XNA, а именно Microsoft.Xna.Framework.Content.Pipeline .Processors.TextureProcessor и Microsoft.Xna.Framework.Content.Pipeline.TextureImporter. Существуют также аналогичные классы для типов контента FBX, Video, Audio.

Трубопровод в сборе - это как сборка, позволяющая импортировать содержимое определенного типа. Прежде чем мы углубимся в подробности, обратите внимание, что весь ваш контент находится в специальном проекте контента, и этот проект ссылается на сборки, содержащие кучу готовых импортеров, которые производятся от базового процессора содержимого и класса импортера. Эти классы позволяют типу проекта контента заполнять список импортеров, которые можно использовать для определенного типа, и которые вы можете изменить с помощью окна свойств. Проверьте снимки экрана ниже.

Content import options in properties window

Content import references in a content project

Как я дал пример выше, есть предопределенные Импортеры XNA Content. XNA также позволяет расширить Content конвейер с помощью собственных импортозависимых реализаций. Для этого XNA предоставляет вам два класса для расширения в проекте Content Pipeline Extension. Первый - Content Importer, а другой - Content Processor.

A Content Importer - это класс, который происходит из Microsoft.Xna.Framework.Content.Pipeline.ContentImporter и переопределяет метод Import, которому передается имя файла строки и объект контекста импорта и возвращает некоторый тип объекта (общий тип T) для использования в вашей игре: Texture2D, строка или ваш собственный сложный тип. Это называется первым при загрузке содержимого.

A Content Processor - это класс, который предоставляет способ преобразования содержимого или преобразования одного типа контента в другой. В XNA это подкласс Microsoft.Xna.Framework.Content.Pipeline.ContentProcessor, который переопределяет метод с именем Process, который принимает объект TInput и объект контекста импорта и возвращает TOutput. Он называется вторым после импорта содержимого. Это полезно, если вы импортируете один тип контента каким-либо образом, но у вас есть много вариантов, как его обрабатывать.

Чтобы увидеть это, просто добавьте проект Content Pipeline Extension и добавьте к нему классы Content Processor и Content Importer. Сделайте это, добавив новый элемент, есть элементы шаблонов для этих двух типов классов, чтобы вы могли легко создать базовый конвейер без реализации. Тем не менее, вам нужно, чтобы ваш контент-проект ссылался на этот проект расширения контента, прежде чем вы сможете его использовать. После добавления этой ссылки ваш настраиваемый конвейер контента отображается как выбор в списке контент-процессора/импортера, который появляется в окне свойств актива. Импортер/процессор выбирается автоматически для активов, расширение которых соответствует тому, которое определено в ContentImporterAttribute, украшающем класс импортера контента.

//[using statements omitted for brevity] 
// TODO: replace this with the type you want to import. 
using TImport = System.String; 

namespace ContentPipelineExtension1 
{ 
    /// <summary> 
    /// This class will be instantiated by the XNA Framework Content Pipeline 
    /// to import a file from disk into the specified type, TImport. 
    /// 
    /// This should be part of a Content Pipeline Extension Library project. 
    /// 
    /// TODO: change the ContentImporter attribute to specify the correct file 
    /// extension, display name, and default processor for this importer. 
    /// </summary> 
    [ContentImporter(".abc", DisplayName = "ABC Importer", DefaultProcessor = "AbcProcessor")] 
    public class ContentImporter1 : ContentImporter<TImport> 
    { 
     //Microsoft.Xna.Framework.Content.Pipeline.ContentImporter<T> 
     public override TImport Import(string filename, ContentImporterContext context) 
     { 
      return "This the simplest importer ever that doesn't even take into account the file being imported."; 
     } 
    } 
} 

// TODO: replace these with the processor input and output types. 
using TInput = System.String; 
using TOutput = System.String; 

namespace ContentPipelineExtension1 
{ 
    /// <summary> 
    /// This class will be instantiated by the XNA Framework Content Pipeline 
    /// to apply custom processing to content data, converting an object of 
    /// type TInput to TOutput. The input and output types may be the same if 
    /// the processor wishes to alter data without changing its type. 
    /// 
    /// This should be part of a Content Pipeline Extension Library project. 
    /// 
    /// TODO: change the ContentProcessor attribute to specify the correct 
    /// display name for this processor. 
    /// </summary> 
    [ContentProcessor(DisplayName = "ContentPipelineExtension1.ContentProcessor1")] 
    public class ContentProcessor1 : Microsoft.Xna.Framework.Content.Pipeline.ContentProcessor<TInput, TOutput> 
    { 
     public override TOutput Process(TInput input, ContentProcessorContext context) 
     { 
      return input + "processed!!!!"; 
     } 
    } 
} 

Я еще раз говорю о том, что ваш контент-импортер должен ссылаться на ваш контент-проект. Проверьте снимок моего обозревателя решений ниже.

Content project references content pipeline extension

Кроме того, импортер контента теперь возможность выбрать для обработки ваших активов. Импортер и процессор актива выбираются автоматически в соответствии с его расширением.

Content import options extended in properties window.

Это отличный инструмент, если вы хотите, чтобы другие люди сотрудничать без программно с вами в вашей игре. Например, вы хотите, чтобы разработчики уровней создавали XML-файлы или текстовые файлы, описывающие ваши уровни. Теперь вы разрешаете им это делать, а затем создавайте импортеры содержимого, которые импортируют эти файлы, и помещают их в игровые объекты, которые вы используете в своей игре, как если бы вы их создали программно.

Теперь откуда взялась ошибка, из которой вы видите? В вашем проекте контента есть контент, у которого свойства Content Importer и Content Processor установлены на те, которые существуют в какой-либо сборке, на которые не ссылаются, но на которые параметры некоторых активов указывают как импортер содержимого. Расширение конвейера контента существует как DLL в загруженном ZIP-файле, см. Первый оператор сообщения для пути.

Ух, поворот, это довольно сообщение! Придется использовать его в своем блоге! : D

Смежные вопросы