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.
Прошло тысячи лет (хорошо, много секунд, по крайней мере…) с момента нашего прошлого XNA-сообщения, прошли века с момента публикации последней игры (хорошо, несколько сообщений) и значительное время, когда мы имели дело с Windows Phone 7… нда .. хм... вроде… ну хорошо, хорошо… ладно.
До сих пор я думал, что это крутая XNA-игра для Windows Phone, рассказывающая о том, чего я не представлял – о переносе с намного более старых версий Windows с помощью управляемого DirectX на Windows Phone 7 и XNA. Также мне понравилось, как этот проект иллюстрирует концепцию «стоять на плечах гигантов», и вместе с тем он другие фрагменты открытого кода.
И кому не понравиться играть во «Вторжение» на Windows Phone 7.x, имея все исходники?
Игра «Вторжение» на XNA для Windows Phone 7
«Вторжение» – это игра-стрелялка по НЛО, первоначально сконструированная Мауричо Риттером (Mauricio Ritter). В статье описывается моё портирование этой игры для Windows (C# и Managed-DirectX) на Windows Phone 7 (C# и XNA 4.0). Предоставляется полный исходный код игры.
Возвращаясь в 2002 год, Мауричо Риттер публикует свою игру «Вторжение» на CodeProject. Она была написана на С++ и использовала API DirectDraw из DirectX 7, который Microsoft удалил в DirectX 8. В следующем году Стив Майер (Steve Maier) перенес игру на C# с Managed DirectX и также опубликовал ее на CodeProject. Managed DirectX ушел после 2005 года и был заменен XNA. Обе эти устаревшие версии запускалиь на Windows XP. В статье описывается мой, занявший неделю, процесс портирования версии с Стива с Managed DirectX на Windows Phone 7, использующий XNA 4.0.
Я преследовал несколько целей, занимаясь переносом этой игры, кроме очевидной «чтобы можно было играть на Windows Phone 7». Эти цели следующие:
- Перепроектировать код в более управляемые классы
- Сделать код более читаемым, чтобы в нем могли разобраться новички
- Упростить код за счет использования возможностей C# и классов платформы XNA
- Навести глянец на игру, чтобы ее можно было разместить на Windows Phone Marketplace
- Сохранить игру свободно доступной и с открытым исходным кодом
- Но по-прежнему завершить процесс переноса за неделю!
Принимая во внимание мое свободное время (которое я растянул на несколько дней), я лишь частично надеялся на успех. Версию 1.0 я поместил на Marketplace сегодня и рассматриваю ее как «незавершенный проект».
Я упоминал о других проектах с открытым кодом?
Заимствованный открытый исходный код
Было несколько дополнительных моментов, которые я хотел бы добавить в игру и, к счастью, у меня уже были готовые файлы кода, что позволило включить их в проект легко и быстро. Эти файлы можно найти в пространствах имен ImproviSoft проектов Diagnostics, Drawing, и System. Не дайте пространству имен ввести вас в заблуждение – этот код свободно доступен и моя компания (ImproviSoft) не писала его большую часть. Файлы содержат комментарии, указывающие на первоисточники кода – главным образом это команда XNA Microsoft, XNAWiki.com, Эльберт Перез (Elbert Perez) из OccasionalGamer.com. Спасибо им большое! Вот список этих файлов:
- FrameRateCounter . cs – выводит на экран количество фреймов в секунду для отладочных целей, от Шауна Хардгривза (Shawn Hargreaves) из команды Microsoft XNA.
- SimpleShapes . cs – класс для прорисовки двумерных примитивов (например, Rectangle), от XNAWiki.com (хотя возможно упомянут еще где-то).
- Accelerometer . cs – класс управления вводом акселерометра, от create.msdn.com (команда Microsoft XNA).
- Camera2D . cs – класс для оперирования двумерной камерой (создания экранотрясения!), от Эльберт Переза из OccasionalGamer.com – Спасибо, Эльберт!
- InputState . cs – класс для управления всеми типами устройств ввода, включая сенсорный экран, от create.msdn.com (команда Microsoft XNA).
- MusicManager.cs – класс для проигрывания фоновой музыки, от от create.msdn.com (команда Microsoft XNA).
- RandomManager . cs – простой класс для генерации случайных чисел – Хорошо, возможно его написал я, затратив пару минут.
- SoundManager . cs – простой класс-оболочка для вызовов SoundEffect.Play для звуков с установленным максимальным уровнем громкости.
- VibrationManager . cs – класс, заставляющий телефон вибрировать по команде (для форсирования ответа), от create.msdn.com (команда Microsoft XNA).
Вот снимок решения:
И, наконец, снимок работы на эмуляторе...