Тег: haxepunk

Пятнашки Haxe + HaxePunk + NME

Опубликовал – 28.02.2013

Доброй ночи товарищи, захотелось пощупать Haxe с его кроссплатформенностью. В целом мне понравилась простота изучения Haxe. Надо полагать аналогичный синтаксис используется в ActionSript (могу ошибаться, поправьте если что).

Решил на конкретной задаче изучить это дело. Взял для начала простенькую игру пятнашки, я их не так давно писал на яве, чтоб обрести вдохновения на создание чего-то большего.

Установка самого Haxe заняла не больше 20 минут, при том что я никогда этим не занимался. NME мне в этом очень помог. Выбор IDE пал на первую из выдачи гугла – FlashDevelop. Не скажу что самая удачная IDE, которую я использовал, а после использования IntelliJ IDEA она просто меркнет своими далеко не богатыми возможностями. Из недостатков могу отметить парочку, которые меня больше всего стопали в разработке:

1. Рукописные импорты, т.е. банально подключить свой же класс, который лежит в соседнем пакедже мне нужно ручками набирать его import ru.znay.znay… как мне кажется, современная IDE себе такого позволить не может.

2. Автоформатирование срабатывает только по нажатию ентер и переходу на другую строчку, либо если поставишь заключительные «;» – очень напрягает чисто визуально, когда форматируешь строку в середине не соблюдая пробелы(возможно дурная привычка) ожидая что IDE поправит само, ан нет. необходимо перейти в конец строки и тыкнуть ентер. Глуповато.

Так же пробовал плагин Haxe support для моей любимой IntelliJ IDEA. Но он оказался вообще сыроват в плане сборок под разные платформы (их там просто нет, я так и не понял как из идеи собрать проект), хоть у него и нет проблем с авто импортами и авто форматированием.

Что же касается фремворка HaxePunk он оказался очень дружелюбным, и даже очень документированным, с ним у меня проблем вообще не было. Очень порадовали tweens, это вероятно флешевские фишки. Но пользовать анимацию или какие либо движения с их помощью одно удовольствие. Как пример в игре я использовал два вида tween:

1. Из фремворка HaxePunk:

var screenFader = new VarTween();
screenFader.tween(picture, "alpha", to, duration);
world.addTween(screenFader);

Что же тут произошло, давайте разберемся. Перво наперво мы создаем объект типа tween их в пакете com.haxepunk.tweens.misc несколько, приводить список не буду, иначе статья растянется. Дальше указываем твину объект с которым мы работаем, вторым атрибутом указываем имя свойства, третьим до какого значения доводить это свойство и четвертым время выполнения твина. Можно еще указать callback, который сработает по завершению работы. И так называемые EaseFunction, это обычная интерполяция, можно выбрать линейную, квадратичную, косинусойдную и тд. Смотря какой плавности вы хотите добиться.

2. Я так же попробовал твин из фремворка Actuate, выглядит примерно так же:

Actuate.tween (this, duration, { x: targetX, y: targetY } )
   .ease (Quad.easeOut)
   .onComplete (this_onMoveToComplete);

Т.е. все просто, указываем объект, время выполнения, свойства указываем сразу с финальными значениями, дальше можно указать EaseFunction, либо сразу повесить callback на разные евенты. Вообще удобно, твин от Actuate использует паттерн декоратор, работать с ним одно удовольствие.

Вероятно я не использовал всех возможностей фремворка и что-то изобрел сам, но работать было приятно. А еще больше мне понравился результат, теперь, с помощью NME я могу собрать проект под разные платформы. Вот к примеру собрал на флеше:

Исходники проекта выкладываю для ознакомления, может кому то понадобятся, вот ссылка. Но повторюсь, так как это был мой первый опыт работы с Haxe и HaxePunk возможно там есть несколько велосипедов, которые уже изобретены.