Haxe + OpenFL: даже моя бабушка сможет сделать игру под iOS!

  • Tutorial


Привет, %USERNAME%! решил рассказать тебе, как, приложив минимальные усилия, начать разрабатывать на Haxe игры под iOS (на самом деле и не только, но я решил ограничить данную статью именно этой платформой).

Для этого нам понадобятся:
  1. бабушка Руки. Желательно прямые. Ещё желательней из плеч;
  2. Mac OS X;
  3. XCode;
  4. Идея для игры.


Приглашаю всех под кат, даже если чего-либо из списка у Вас нет в наличии.


Установка


Первым делом заходим в консоль и выполняем комманду haxe. Если вдруг по какой-то причине видим сообщение

-bash: haxe: command not found

то бежим и скачиваем Haxe 3 по ссылке http://haxe.org/download и никому больше не говорим, что у вас не стоял Haxe ;)

Следующим шагом установим OpenFL — кроссплатформенный SDK, реализующий Flash API на различных платформах:

haxelib setup
haxelib install openfl
haxelib install openfl-tools
haxelib install openfl-native


После установки нужных библиотек осталось только проинициализировать OpenFL:

haxelib run openfl setup

Failed to load library? Смотри спойлер
Если вдруг получили ошибку с примерно таким содержимым:

Uncaught exception - load.c(237) : Failed to load library : nme.ndll (dlopen(nme.ndll, 1): image not found)

это ещё не повод для паники. Стоит всего-лишь выполнить команду:
bash <(curl -s https://gist.github.com/jgranick/5658434/raw/dbdb6bbeecceeeda554a815aa8e57616540d6544/install.sh)



Свинюшки




Чтобы не растягивать статью, буду использовать идущий в комплекте с OpenFL пример мач3 игры PiratePig, скриншот которого можно увидеть выше.

Для того, чтобы получить такую же прелесть у себя, выполним в терминале команду:
openfl create PiratePig


По её окончанию в папке PiratePig появится готовый для работы проект. Запустим его в симуляторе:

cd PiratePig/
openfl test ios -simulator


Если всё прошло нормально (а иначе быть и не должно ;)), появится симулятор iPhone, который будет выглядеть примерно вот так:


Полюбовавшись игрой в симуляторе появляется вполне ожидаемый вопрос: «А как это дело запустить на устройстве?». Ответ очевиден:

openfl test ios


Команда запустит приложение на первом подключённом iOS-устройстве разработчика.

Что дальше?


Кто работал с Adobe AIR помнит тот ужас упаковки приложения под iOS. Благодаря Haxe + OpenFL мы получаем стандартный XCode проект, который можно найти в папке Export/ios/, поэтому процесс отправки приложения в App Store аналогичен таковому для нативных XCode-проектов и неоднократно описан, в том числе на Хабре.

F.A.Q.


Позволяет ли связка Haxe + OpenFL использовать нативные расширения?
Да, более того, про это уже есть статья: habrahabr.ru/post/186230


Сложно ли перейти на OpenFL после Flash?
Язык Haxe очень близок к AS3, а библиотека OpenFL позволяет использовать привычный Flash API, поэтому переход будет настолько лёгок, насколько это вообще возможно.


А позволят ли моему приложению попасть в AppStore? Кроссплатформенно - значит там интерпретатор!
Популярное заблуждение. После компиляции на iOS Вы получаете нативный код на C++.


Flash API? А что если я хочу использовать OpenGL?
Не смотря на то, что OpenFL близок к Flash API, он не лишает Вас всех преимуществ нативной разработки. Более того, в OpenFL и так всё рендерится через OpenGL. По этой ссылке можно найти пример использования OpenGL.


Есть ли уже в App Store проекты, написанные на OpenFL?


Заключение


OpenFL, как библиотека Haxe, имеет огромные перспективы для кроссплатформенной разработки. В данной статье я показал как использовать её при разработке под iOS, но при этом данную игру можно так же запустить на Android, HTML5 или Flash, и работать она будет везде одинаково ( Полный список поддерживаемых платформ ). Пробуйте, экспериментируйте и делитесь опытом!
Поделиться публикацией
Комментарии 15
    +2
    О! Как раз сейчас ковыряюсь с OpenFL, но пока под Flash. У вас получилось это все адекватно дебажить?
      +2
      «Под флеш» дебажится как обычные флешки, только надо компилятору добавить -D fdb -debug . А потом запускаешь дебаг сессию из любой ide и дебажишь.
        +1
        >любой ide
        Я с этим всем недавно работаю, что подскажете под Linux?
          +1
          Под линукс с дебагом Intellij IDEA. Без дебага, но весьма удобно можно работать в Sublime c вот этим плагином.
            +1
            Спасибо!
      +2
      Хм, если оно будет способно заменить собой проприетарный флеш и кривой (под Линукс так точно) Adobe AIR, то очень даже гуд.
        +1
        OpenFL уже сейчас собирает нативные приложения под 3 основные системы, не считая мобильные и флеш с html5. Плюс возможнось писать нативные расширения под нужные платформы позволяет говорить о полноценных приложениях, без виртуальных машин.
        +2
        А насколько API OpenFL дружелюбен для создания всяких форм (например, сложных диалогов настроек)?

        То есть насколько удобно на Haxe+OpenFL писать НЕигрушки, а например что-то типа клиента для habrahabr?
          +1
          ОпенФЛ не имеет доступа к нативным контролам платформы. Так же как и флеш, OpenFL — это по сути рендер в пределах одного канваса. Но есть разработка Basis, которая позволяет работать с нативными контролами для iOS/Mac и Android.
          +1
          Подскажите, как создать новый проект, чтобы он содержал папку «export» и в ней XCode-проект? Или это надо делать руками?
            +2
            Дмитрий, нужно проделать все, что написанно в статье. И после openfl test ios в папке «export» у вас уже будет лежать сгенерированый проект. В этом вся суть: генерируется промежуточный код, компилируется, собирается рабочее приложение + создаются дополнительные файлы для работы со сгенерированным проектом в XCode.
              0
              Отлично, работает, спасибо! Начинаю эксперименты, платформа очень приглянулась! Давно поглядывал на Haxe, и вот — отличный повод копнуть его глубже. Жаль только, что лишь 13я Idea EAP может нормально работать с OpenFL, FlashDevelop хорош, но ради него одного напряжно заводить винду. Вы сами как работаете с OpenFL, в какой IDE, как дебажите или обходитесь лишь журналированием?
                +2
                Я с OpenFL работаю мало, знаю что в Idea есть cpp дебаг. Я же обычно работаю с флеш/html5 и там дебаг опять таки есть.
            0
            Как там обстоят дела с созданием фильтров, эффектов для визуальной части? Как я понимаю есть обычный DisplayList и OpenGL контекст, их можно использовать совместно?
              0
              Фильтры работают, не уверен если все, но основная часть да. Да, доступ к OpenGL есть и пока совместно они не работают, но есть такой баг-репорт и ожидается его решение. Плюс openFL-native начал переход на недавно вышедший sdl 2.0

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое