Соединяя управление состояниями игры и средства Platformer XNA
Почти каждое приложение нуждается в системе управления состояниями, и игры даже более других. Начиная от основного меню, до настроек и управления жизнью. Игра без настроек, жизней и т.п. – игра лишь наполовину.
Кроме прочих, 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. Здесь нет механизма «перетащи и брось». Код, код, код, всё – код.
Это означает, что некоторые вещи, просто реализуемые в мире, основанном на формах, становятся сложными в мире циклической игры. Например, экраны настроек и т.п.
Достаточно разговоров, посмотрим на код. В этом фрагменте код отвечает за прорисовку уровня.
Посмотрим на снимки до и после, чтобы увидеть, чего мы достигли. Вот оригинальный Platformer
Замечание. Если вы загрузите код игры, то при попытке запуска увидите следующее сообщение:
Попробуйте изменить свойство в профиле игры на «Reach» (через меню «Свойства проекта» – Project Properties).
Здесь приведен снимок экрана для мегаслитой версии (костяк+жизни+переходы между уровнями + запуск + движения фрагментов), который показывает главное меню, жизни и прокрутку.
Чтобы дать возможность почувствовать проект, приведем снимок экрана решения Visual Studio.
Итак, как сделано главное меню?
Добавка управления состоянием игры делает кодирование явно проще, много проще чем требовалось для изобретения этого колеса и кодирования «с нуля».
Что мне понравилось в Platformer’е так это, как сопоставляются уровни. Карта каждого уровня на самом деле является текстовым файлом.
Вот исходный первый уровень:
А вот новый первый уровень поддержкой прокрутки
Надеюсь ,это немного раздразнило ваш аппетит, и вы займетесь этим в ближайшие выходные…