Как я подключал AsWing или swf-библиотеки в 2.07

Disclaimer: я из рук вон плохо знаю flash-платформу, поэтому часть моих приключений ниже может кому-то показаться странной - это смело можно списывать на то, что я чайник...

А дело было так. Пришло мне в голову перевести gui для небольшой программки с Arctic на AsWing.
И вот, разбираясь с подключением AsWing, сделал для себя несколько важных открытий (с опозданием примерно на полгода).
Во-первых стоит у себя держать последнюю версию компилятора, это утверждение я уже проверил в свое время, когда новая версия исправила глюки inline... а, впрочем, обо всем по порядку...

Как пользоваться AsWing я, естественно, не знал. Документация на сайте оказалась с сильным китайским акцентом.
"you should not add component to JWindow directly, you should add component like this"
Поэтому решено было действовать по туториалу с haxe.org.
AsWing 1.5 был успешно скачан, из swc был дернут файлик library.swf, потом я сгенерировал классы командой
--gen-hx-classes library.swf.
Пример из туториала заработал, интерфейс, склепанный на GuiBuilder - нет.
Выяснилось, что сгенеренный билдером haxe-код несколько хреновый, JPanel не работает как родительский элемент для интерфейса (перед этим была перерыта документация) - в туториале был JFrame, который создавал окошко с рамками и заголовком - чтобы их убрать, следовало создать JWindow.

Но этим дело не ограничилось. При компиляции мне заявили что
org.aswing.AsWingConstants should be Int
Беглый осмотр показал, что в сгенеренном hax'ом файле образовался enum, в haxe перечисления не приводятся к инт...
В as-исходнике оказался класс со списком констант, они были тщательно скопированы и перерисованы в inline static
Интерфейс заработал, омрачало эту радость только то, что он был со скином (LAF - look and feel) по умолчанию.
Интернет был перерыт на тему того, как прикрутить скин.
И тогда было сделано открытие первое - с версии 2.06 можно вкомпилировать несколько -swf-lib.
И я обновил компилятор.

Далее следуем по проторенной дорожке - топаем искать бинарник со скином (в моем случае это OrangeLaf) - делаем --gen-hx-classes - и получаем... ошибку - invalid class name

Еще пару часов копаюсь в интернете, пробую подгрузить swfку лоадером, получая конфликты имен - среда ругается на redifinition, пока не натыкаюсь на строчку в чейнджлоге
2011-01-30: 2.07
flash9 : changed --gen-hx-classes implementation
now use 'haxe -swf-lib lib.swf --gen-hx-classes' instead

...все постепенно встает на свои места. Обновился то я - на последнюю версию.
--swf-lib orangelaf.swf --gen-hx-classes ругается на отсутствие какого-то компонента из aswing
--swf-lib aswing.swf --gen-hx-classes ругается на отсутствие какого-то компонента из flash9 о_О
в ход идет тяжелая артиллерия
-swf9 --swf-lib aswing.swf --gen-hx-classes срабатывает... и генерирует код для всех классов флеш-платформы... наблюдаю файлики Array.hx, ArrayAccess.hx и так далее. Начинает доходить.

Иду жму f5 во флешдевелопе, там подключены обе swfки - оно внезапно компилится. Снисходит озарение - сношу к черту папку с классами для асвинга - получаю ошибку - уже знакомую. Про enum. Последний стал с новой версией лучше - там появился @fakeInt - но все равно неправильный. Возвращаю обратно в папку org/aswing самописный класс с исправлением - и только его. Дописываю строчку
UIManager.setLookAndFeel(new OrangeLookAndFeel());
и у меня появляется скин для интерфейса.
Занавес.

...А все потому, что в 2.07 появилась одна малозаметная фича - --gen-hx-classes стал практически не нужен
haXe автоматически генерирует классы для подключенных командой -swf-lib библиотек. Которых теперь неограниченное количество. Вместе с подсказками IDE.
В итоге подключение AsWing вместе со скинами - это две строчки в additional compiler options флешдевелопа - и две кинутые в проект swfки. Ну и исправление extern класса - код проекта приоритетней автоматического.
Зависимости haXe разрешит сам.
Точно так же подключаются assets - компилятор сам предложит к ним путь.

Ура товарищи. Революция свершилась! Просто ее не все заметили...

Комментарии

на главную

пожалуй самый захватывающий пост за всю историю haxe.ru. просто эпопея какая-то, не смог оторваться пока не дочитал до хеппи-энда. :)
если серьезно, то Disclaimer можно было бы и не писать, поскольку и не каждый хорошо знакомый с flash продерется сквозь особенности работы с такими gui - библиотеками для haXe как arctic и haXe версия AsWing.
Я пользовался arctic еще до haXe 2.0 и даже успел тогда написать на нем один средних размеров проект с ним в основе gui и один десктопный тест на swhx с ним же. Сначала было интересно, но потом пришло разочарование, во первых из-за направления по которому пошло развитие библиотеки (особенно в плане работы данными, обновления и т.д.), а во вторых меня к сожалению переход с более ранних на более поздние версии наоборот ломал UI так, что приходилось заново разбираться что там изменилось и переписывать старый код, правда, если правильно помню, речь идет больше о версиях arctic, а не haxe.
Чуть позже основная моя деятельность изменилась и большую часть нужно было делать на AS3, Flex, так что AsWing я посмотрел только поверхностно и так и не дошел до "ура, товарищи". правда тогда еще был haXe <= 2.05.
посему вопрос - так можно выжать из этого захватывающего текста максимально короткий тьютор, так сказать "for dummies", как без головной боли подключать AsWing с ui собранным в GuiBuilder к haXe 2.07? Какие именно 2 строки нужно добавить в additional compiler options FD и т.д.

p.s. если не против, поставлю этой статье флаг публикации на главной и в основной ленте сайта. Она того стоит.

спасибо. можно,

спасибо.
можно, сделаю, собирался - только сначала хочу до конца портировать интерфейс и сделать вводную в асвинг
родные туториалы не очень

сокращенный вариант "for dummies" на английском уже сделал в haxe.org-овской вики

самое то

по мне так самый подходящий вариант. всё коротко и ясно. спасибо!

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].
  • Use [gist:####] where #### is your gist number to embed the gist.

Подробнее о форматировании

CAPTCHA
Для отсева спамеров)
k
X
X
z
A
p
Enter the code without spaces and pay attention to upper/lower case.