суббота, 10 августа 2013 г.

Записки программиста #3. XNA vs Mono vs Silverlight vs Engine

Изначально свою будущую игру «AlienStorm» предполагалось делать по средствам XNA.

Wiki: Microsoft XNA — набор инструментов с управляемой средой времени выполнения (.NET), созданный Microsoft, облегчающий разработку и управление компьютерными играми. XNA стремится освободить разработку игр от написания «повторяющегося шаблонного кода» и объединить различные аспекты разработки игр в одной системе. Набор инструментов XNA был анонсирован 24 марта 2004 на Game Developers Conference в Сан-Хосе, Калифорния. Первый Community Technology Preview XNA Build был выпущен 14 марта 2006.

Хорош он тем, что можно делать игру для десктопа, на нем хорошо отлаживать, показывать друзьям, а также без существенных изменений использовать его в Windows Phone, да и знание его сыграло не маленькую роль.
И тут как гром среди ясного неба, по правде слухи ходили, но никто не верил… Microsoft от 31 января 2013 заявило, что новые версии XNA более не будут разрабатываться и XNA не будет доступен в новом Metro интерфейсе Windows 8, а также на Windows 8 RT. А также на Windows Phone 8 будет поддержка XNA приложений в режиме совместимости…
Печали не было границ…
Разрабатывать в дальнейшем, я собирался на C#, и для XNA требовалась замена.
Несколько мучительных запросов к поисковикам показали, что для .NET существуют два враппера над DirectX: SlimDX и SharpDX.
При этом SlimDX и SharpDX поддерживают DirectX 11, a XNA – нет.
Сравнив код примеров, и погоняв простенькие тесты, убедился, что SharpDX в части взаимодействия с Unmanaged кодом проработано глубже. Кроме того, SharpDX собирается под Any CPU, что позволяет делать один билд как для x86 так и для x64 архитектур. Фактически этот выбор на код почти не влияет — это не более чем врапперы, пишем мы по-прежнему под голый DirectX, разница разве что в именовании — по-другому названы пространства имен, и где-то другой регистр, где-то чуть по-другому именуются классы. Судя по заявлениям авторов обоих врапперов, функционал Direct3D 11 покрыт полностью и работает практически идеально. Поверим им на слово. Но все равно это было немного не то.
Решил поискать дальше про аналоги XNA, ведь уже не раз слышал о том, что есть open-source реализации:
Обе представляют собой кроссплатформенные open-source реализации Microsoft XNA для Mono.
Также уже были найдены готовые движки:
И случайно наткнулся на очень неплохую реализацию физики по средствам Silverligh - PhysicsHelperXaml я был мягко говоря обескуражен и самой идей и реализацией.

И так из всего этого многообразия приходится выбирать.
Решил с того, что нужно сперва подвести итоги, что же у меня есть:
  • Работающий прототип со своими минусами
  • Примеры физики для 2д
  • Большая часть графики 2д
  • Опыт работы с XNA
Платформы, под которые должно работать: Windows Phone 7/8, Windows 8, Windows 7+, не плохо бы иметь возможность портирование на IOS и Android, но это на будущее.
Из готовых движков очень понравился Unity3D, но мои умения и наработки касаются 2д, но за него я в будущем еще возьмусь =)
Physicshelperxaml – ну очень понравился, и реализация, и возможность в плане редактора использовать студию, но к сожалению, по моим расчетам сделать на этом, что-то большое и красивое будет проблематично. К примеру все реализации части, которые я нашел, довольно сильно тормозят, возможно я не умею готовить, да и возможность даже в будущем сделать версию на ней для IOS и Android очень призрачна…
Выбор мой пал на MonoGame. У него конечно много своих минусов, но он постоянно развивается и это радует. Да и на текущий момент, он уже довольно-таки неплох.