Когда речь идет о бизнес приложениях, принято писать несколько копий под каждую из популярных мобильных платформ. Это вполне оправдано, т. к. Android/iOS/etc платформы столь специфичны, что реализовать по принципу «Code at once — run everywhere» довольно сложно. Однако, ситуация совсем иная, когда речь идет о мобильных играх. У игр как правило свой собственный стиль графических элементов — кнопок, меню и т. д., и вся графика построена либо на спрайтах, либо на 3D (прим. — в дальнейшем речь будет идти только о 2D движках). Появляется вполне закономерное желание написать приложение один раз и собирать его под разные платформы.
Достичь этого нам поможет кросплатформенный фреймворк MOAI.
Прежде всего, почему именно MOAI? Этот фреймворк был выбран целенаправленно. Для себя я решил, что мне нужен движок, который:
- Кросплатформенный
- Использует аппаратное ускорение OpenGL
- Игровая логика реализуется скриптовым языком (желательно LUA)
- Должна быть возможность писать расширения на C/C++
- Желательно опенсорсовый. Последнее было обусловлено не желанием сэкономить денег, а возможностью править сам движок в случае каких-то критичных багов
Раньше, до момента выбора фреймворка, на Луа я еще не программировал, но выбор пал все-равно на него т. к. по своим параметрам он подходит идеально — потребляет мало памяти, имеет уборку мусора, замечательно интегрируется с сишными приложениями. В ходе его изучения Луа вполне оправдал свои ожидания, так что могу сказать, что выбор был вполне удачным.
Из кандидатов на фреймворки я рассматривал Corona SDK, Gideros, Cocos2d-X (да, есть возможность скриптовать его на Lua) и MOAI.
Если сравнивать Corona SDK и Gideros, то на мой взгляд более предпочтителен Gideros. Т.к. в поставку входят различные инструменты, включая простенькую IDE, есть возможность писать плагины, а бесплатный режим отличается от платного только наличием сплеш скрина gideros. Корона же в бесплатном режиме ставит таймаут на сборку (но не на эмуляторе), к тому же после запуска появляется диалог, что нужно купить Корону, тогда диалога не будет. Плагины писать можно только после покупки Corona Enterprise, цена которой вообще не указана. Но тем не менее, по некоторым параметрам Корона лучше — у нее большее сообщество, а также более оптимизирован сам движок (загрузка спрайтов и т.п.).
Выбирая между Cocos2d-X и MOAI, я выбрал последний, т.к. он изначально разрабатывался, как движок на Lua.
Установка
Клонируем его здесь github.com/moai/moai-dev или, что еще лучше, делаем форк.
Бинарную сборку ставить не рекомендую, т. к. если вы не заинтересованы в модифицировании движка, то скорее всего, лучше попробуйте Gideros.
Далее открываете проект в Xcode проект moai-sdk/xcode/osx/MoaiSample.xcodeproj и компилируете moai бинарник.
Внимание, десктопные версии MOAI есть и под Windows и Linux! Но собрать iOS проект можно, конечно только под маком.
После того, как moai установлен, пробуем запустить пример:
Заходим в директорию /usr/local/moai-sdk/samples/hello-moai и запускаем пример
moai main.lua
В этот момент программист, разрабатывавший под Android или iOS, должен получить огромнейшее удовольствие от того, как запускается пример. Он запускается мгновенно! Без компиляции, перепаковки и прочего. Запустил пример и сразу увидел результат. Честно сказать, оно того стоит!
Android
Чтобы запустить приложение под Android или iOS, нужно создать соответствующие сборки. Для Android все делается довольно просто — при помощи скрипта moai-sdk/ant/make-host.sh создаем базовый Android проект, скрипту можно указывать дополнительные опции.
Базовый проект — это исходники Android приложения, которое содержит в себе Moai библиотеки, а также скрипт для упаковки в итоговый *.apk lua файлов, графики и других файлов, необходимых вашей программе.
Копируем полученый unkown-host в необходимое место (у меня — это директория ~/Projects), указываем в settings-local.sh путь к Android SDK:
android_sdk_root="/usr/local/android-sdk"
и путь, где лежит основной проект на Lua
src_dirs=( "/Users/alex/Projects/myproject" )
Теперь, чтобы запустить приложение на Android, запускаем скрипт run-host.sh
Нужно иметь ввиду, что сборщик довольно простой — он просто забирает исходники Android приложения, копирует в них MOAI проект и собирает apk. Т.е. если нужно включить в приложении поддержку акселерометра, то нужно явно отредактировать MainActivity.java в исходниках базового проекта.
iOS
Под iOS примерно такой же механизм, только нет такого удобного скрипта для создания нового хоста. Предлагается скопировать семпловый проект и изменять его.
В принципе, это не сложно, но лично мне довольно не комфортно, когда нужно ковырять графические настройки проекта в Xcode.
Внимание — свежие исходники MOAI из репозитория (что не удивительно) могут содержать баги, поэтому если собрать проект не получается, то пробуйте Поэтому, если не хотите тоже с этим разбираться, то либо делайте чекаут стабильных ревизий (по тегам), либо клонируйте мой форк (https://github.com/Nepherhotep/moai-dev), который редко обновляется, и поэтому более стабильный.
Далее разработка выглядит следующим образом — пишете и тестируете код на рабочей машине, а сборку под Android/iOS делаете перед релизом версии.
Полезное
getmoai.com/ — официальный сайт MOAI
github.com/moai/moai-dev — исходники на гитхабе
github.com/ymobe/rapanui/tree/master/rapanui-sdk — фреймворк высокого уровня, использующий MOAI
github.com/derickd/moaigui — библиотека виджетов для MOAI
github.com/Nepherhotep/terevaka — еще один фреймворк высокого уровня для MOAI, собственного приготовления и с плюшками. Подробнее в моей следующей статье habrahabr.ru/post/176771/
Автор: Nepherhotep