Соединяя управление состояниями игры и средства Platformer XNA

Грэг Дункан

clip_image002[4]

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

Кроме прочих, App Hub предлагает два интересных варианта. Один для основной игры – Platformer, которая «…является самодостаточным игровым решением для Windows, Xbox 360 и Windows Phone 7, включающим код игры и ее ресурсы. Игра представляет собой стандартный двухмерный платформер с уровнями, врагами и подбираемыми драгоценностями.» Другой рецепт для управления состоянием игры, «…который показывает, как управлять переходами по меню и между состояниями игры.» Хотя каждый ценен сам по себе, вместе они составляют часть полного изложения игры.

Так что всё, что нам нужно это соединить XNA Platformer и подходы Game State Management.

Аарон Стебнер (Aaron Stebner) с его постом «Ссылка на примеры слияния пускового набора платформера XNA Game Studio 4.0 с образчиком управления состояниями игры (Link to samples that merge the XNA Game Studio 4.0 platformer starter kit with the game state management sample указывает, где это найти.

Mach X GamesВы получите пример управления состоянием игры в моем Platformer’е.

«Я добавил пару версий в пример объединенных Platformer’а и системы управления состоянием, который появился в результате вопроса на форумах AppHub. Здесь приведены все относящиеся к проблеме ссылки:

Костяк слитых версий
+жизни
+переход по уровням
+начало игры
+движение кусочков»

Так что же за проблема с меню?

Она состоит в том, что разработка XNA отличается от разработки WinForm/WPF/SilverLight. В XNA вы отвечаете за прорисовку всего в коде. Здесь нет конструктора GUI. Здесь нет механизма «перетащи и брось». Код, код, код, всё – код.

Это означает, что некоторые вещи, просто реализуемые в мире, основанном на формах, становятся сложными в мире циклической игры. Например, экраны настроек и т.п.

Достаточно разговоров, посмотрим на код. В этом фрагменте код отвечает за прорисовку уровня.

clip_image004[4]

Посмотрим на снимки до и после, чтобы увидеть, чего мы достигли. Вот оригинальный Platformer
clip_image006[4]

Замечание. Если вы загрузите код игры, то при попытке запуска увидите следующее сообщение:

clip_image008[4]

Попробуйте изменить свойство в профиле игры на «Reach» (через меню «Свойства проекта» – Project Properties).

clip_image010[4]

Здесь приведен снимок экрана для мегаслитой версии (костяк+жизни+переходы между уровнями + запуск + движения фрагментов), который показывает главное меню, жизни и прокрутку.

clip_image012[4]

clip_image014[4]

Чтобы дать возможность почувствовать проект, приведем снимок экрана решения Visual Studio.

clip_image016[4]

Итак, как сделано главное меню?

clip_image018[4]

Добавка управления состоянием игры делает кодирование явно проще, много проще чем требовалось для изобретения этого колеса и кодирования «с нуля».

Что мне понравилось в Platformer’е так это, как сопоставляются уровни. Карта каждого уровня на самом деле является текстовым файлом.

Вот исходный первый уровень:

clip_image020[4]

А вот новый первый уровень поддержкой прокрутки
clip_image022[4]

Надеюсь ,это немного раздразнило ваш аппетит, и вы займетесь этим в ближайшие выходные…clip_image024[4]