Дизайн рівня в грі з XNA?


10

Мене цікавить ігровий дизайн. Моя нинішня ситуація обертається навколо Черепиці - у мене є багато різних шарів з різними типами об’єктів в них (для тих, хто не знайомий з Черепицею, об’єкт - це не що інше, як координата з довіреними йому властивостями).

Зараз я перекомпілюю гру кожного разу, коли я вношу невелику зміну до свого картографічного файлу, щоб побачити, чи все правильно розміщено. Чи є спосіб, щоб моя гра автоматично завантажувала рівень, якщо виявлена ​​зміна файлу карти? Чи допускає XNA навіть це, або спосіб роботи конвеєра контенту не дозволяє динамічний вміст таким чином? Будь-які поради або пропозиції абсолютно вітаються.

Відповіді:


8

Я припускаю, що ваші картографічні файли обробляються контентним конвеєром, а потім завантажуються під час виконання Content.Load. У вас є два варіанти:

  • Збережіть свої карти як XML-файл через IntermediateSerializer.Serialize. Потім, під час виконання, ви можете прочитати їх за допомогою IntermediateSerializer.Deserialize, щоб побачити зміни.
  • Це складніше: викликати MSBuild під час виконання, щоб перекомпілювати ваші файли у належні XNB і перезавантажити їх ContentManager. Цей зразок робить це.

Між двома, я впевнений, що зможу щось розібратися. Дякую!
Крістофер Хоренштейн

2

Ви також можете скористатися Карвонітом, якщо хочете реалізувати це та йти дуже швидко.

Це гнучка рамка стійкості. Я не впевнений, чи буде нова версія працювати на Windows Phone 7 або Xbox.

Ви б створили визначення стійкості за допомогою їх редактора стійкості (це досить просто, ви просто імпортуєте збірку і перевіряєте поля / властивості класів / структур, які ви хочете зберегти). Ви ініціюєте ObjectSpace у коді та додаєте / видаляєте / отримуєте об'єкти з нього . (ці об'єкти зберігаються)

Якщо ви могли б створити абстракцію, щоб двигун плитки чи все, що ви називаєте, неважливо, як саме вона отримує карту, а лише те, що вона отримала ту, яку вона просила. Потім ви можете повернутися назад і використовувати XmlSerializer або проміжний. (що б ви не хотіли) Все, що вам потрібно буде зробити для реалізації цих інших серіалізаторів, це створити ще одну реалізацію абстракції (інтерфейс або абстрактний клас).

Я думаю, що є приклад того, як створювати контент під час виконання на веб-сайті клубу творців XNA. Він, можливо, не буде побудований з останніми рамками. Таким чином, ви можете зберегти свій старий код, якщо вже використовуєте конвеєр контенту. Ось посилання: Winform Series 2: Завантаження вмісту


Мені здається, що це дуже глупо запитує, але чи можете ви описати, що ви передбачаєте робочий процес, використовуючи цей фреймворк? Це звучить дуже акуратно, але я не впевнений, як до нього підійти.
Крістофер Хоренштейн

1
Ну, ви визначаєте серіалізацію в редакторі їх наполегливості. (це дуже просто, ви просто імпортуєте об'єктну збірку та встановите прапорці на структурах / класах та полях / властивостях, які ви хочете зберегти) Після того, як ви це зробите, ви можете просто ініціалізувати об'єктний простір, який буде серіалізувати / десеріалізувати ваші об'єкти . Досить акуратно і швидко вставати і бігати.
Майкл Коулман

1
Ви також можете подивитися на цей проект у кодеплексі для кращого прикладу того, як створювати контент поза візуальною студією. ( xnadevru.codeplex.com/… )
Майкл Коулман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.