Pull to refresh

Краткое введение в MOAI Framework

Reading time 4 min
Views 9.1K
Когда речь идет о бизнес приложениях, принято писать несколько копий под каждую из популярных мобильных платформ. Это вполне оправдано, т. к. 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, цена которой вообще не указана. UPD: как мне написал пользователь Lerg, с недавних пор их продукт немного изменился: habrahabr.ru/post/175689 Но тем не менее, по некоторым параметрам Корона лучше — у нее большее сообщество, а также более оптимизирован сам движок (загрузка спрайтов и т.п.).

Выбирая между 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
Tags:
Hubs:
+6
Comments 12
Comments Comments 12

Articles