Каков рекомендуемый способ загрузки внешних данных в игру XNA4.0?

В настоящее время я работаю над игрой, предназначенной для отправки в XBLIG.

Мой вопрос довольно прост, мне было интересно, какой способ загрузки данных через внешний XML-файл является «рекомендуемым».

Мне это нужно, по крайней мере, для разработки (на ПК), чтобы Game Designer мог работать с переменными игрового процесса без необходимости перестраивать.

В xna3.1 я использовал IntermediateSerializer, которого больше нет для xna4.0.

Я, вероятно, собираюсь создать расширение конвейера контента для доставки, если, конечно, кто-то не может предложить удивительный ответ, который работает как на ПК, так и на XBox! : D

Спасибо,


person 3nixios    schedule 25.05.2011    source источник
comment
Можно спросить по адресу: gamedev.stackexchange.com :)   -  person Richard Marskell - Drackir    schedule 25.05.2011
comment
Я думаю, что конвейер контента доступен только тогда, когда установлена ​​игровая студия; просто то, о чем нужно знать.   -  person George Duckett    schedule 26.05.2011


Ответы (1)


Во-первых, IntermediateSerializer делает существует в XNA 4.0!

Однако, XNA 4.0 изменилась с ориентации на платформу .NET 2.0 на платформу .NET 4.0, которая бывает двух видов. Сборки среды выполнения XNA нацелены на компактную платформу, а сборки конвейера содержимого нацелены на полную платформу. Вам нужно будет войти в свойства вашего проекта и изменить целевую структуру, чтобы вы могли использовать IntermediateSerializer.

Кроме того, Content Pipeline недоступен на Xbox 360, и тоже не доступен в Windows без установлена ​​полная XNA Game Studio. Это означает, что вы не можете использовать InterpediateSerializer при работе на Xbox 360 или для распространения в Windows (применимо как к XNA 3.1, так и к 4.0).

Поэтому, если вы хотите использовать его во время выполнения, во время разработки, решение состоит в том, чтобы добавить в проект конкретную цель сборки для разработки в Windows. Дайте ему определение препроцессора для #ifdef DEVELOPMENT, в которое будет заключен ваш код, сделайте таргетинг на (гораздо более громоздкий) полный .NET 4.0 Framework и добавьте ссылку на сборку на Microsoft.Xna.Framework.Content.Pipeline (где находится IntermediateSerializer).

(Я оставлю выяснение условного таргетинга фреймворка и ссылки на сборку в качестве предмета для исследования - я почти уверен, что это требует ручного редактирования файла проекта. Или вы можете просто создать и поддерживать новый файл проекта параллельно.)

Итак, все, что остается, - это вопрос, что делать в версиях вашего дистрибутива, где у вас нет IntermediateSerializer?

Это чрезвычайно просто: вы можете перетащить свой XML-файл в свой контент-проект. Импортер XML Content Pipeline по умолчанию берет ваш XML, прогоняет его через IntermediateSerializer за вас, создавая XNB файл. Затем вы можете загрузить этот файл как содержимое во время выполнения через ContentManager. (см. также)

(Вместо того, чтобы вставлять кучу условных выражений в код загрузки, я рекомендую использовать этот метод в обычном режиме (во время загрузки), а затем использовать только метод IntermediateSerializer для вашего пути к коду «перезагрузки XML».)

person Andrew Russell    schedule 26.05.2011
comment
Спасибо за отличный ответ! В предыдущих сборках с xna3.1 я просто поставлял dll IntermediateSerializer с дистрибутивом (в Windows), чтобы он работал. Я смогу попробовать это сегодня вечером, большое спасибо! - person 3nixios; 26.05.2011
comment
Ой, спасибо за это :) Это было только внутреннее распространение Anyhoo ^^ - person 3nixios; 26.05.2011