Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
![clip_image002[4] clip_image002[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/7571.clip_image0024_336DD4D8.jpg)
Почти каждое приложение нуждается в системе управления состояниями, и игры даже более других. Начиная от основного меню, до настроек и управления жизнью. Игра без настроек, жизней и т.п. – игра лишь наполовину.
Кроме прочих, 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] clip_image004[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/0564.clip_image0044_7E80CF9A.png)
Посмотрим на снимки до и после, чтобы увидеть, чего мы достигли. Вот оригинальный Platformer
![clip_image006[4] clip_image006[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/6724.clip_image0064_14E34855.png)
Замечание. Если вы загрузите код игры, то при попытке запуска увидите следующее сообщение:
Попробуйте изменить свойство в профиле игры на «Reach» (через меню «Свойства проекта» – Project Properties).
![clip_image010[4] clip_image010[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/8715.clip_image0104_03EB2C40.png)
Здесь приведен снимок экрана для мегаслитой версии (костяк+жизни+переходы между уровнями + запуск + движения фрагментов), который показывает главное меню, жизни и прокрутку.
![clip_image012[4] clip_image012[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/2047.clip_image0124_5F9621F0.png)
![clip_image014[4] clip_image014[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/6710.clip_image0144_20E1248A.png)
Чтобы дать возможность почувствовать проект, приведем снимок экрана решения Visual Studio.
![clip_image016[4] clip_image016[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/8204.clip_image0164_5531856B.png)
Итак, как сделано главное меню?
![clip_image018[4] clip_image018[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/8540.clip_image0184_46A66379.png)
Добавка управления состоянием игры делает кодирование явно проще, много проще чем требовалось для изобретения этого колеса и кодирования «с нуля».
Что мне понравилось в Platformer’е так это, как сопоставляются уровни. Карта каждого уровня на самом деле является текстовым файлом.
Вот исходный первый уровень:
![clip_image020[4] clip_image020[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/5100.clip_image0204_04AF585E.png)
А вот новый первый уровень поддержкой прокрутки
![clip_image022[4] clip_image022[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/5444.clip_image0224_376F3905.png)
Надеюсь ,это немного раздразнило ваш аппетит, и вы займетесь этим в ближайшие выходные…![clip_image024[4] clip_image024[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/5531.clip_image0244_6BDFE580.png)
![clip_image008[4] clip_image008[4]](https://msdntnarchive.z22.web.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/10/39/metablogapi/2117.clip_image0084_01DE5344.png)