Как стать автором
Обновить

Комментарии 24

Да, я тоже недавно начал изучать Flex и сталкнулся с embed. Точно так же не решил проблему (точнее решил, тупо перечисляя все вствляемые файлы). Кстати, насколько я знаю, скольк раз сделаешь embed столько раз файл и присоеденится в прожект, даже если он уже есть.
Я аж решил попробовать :).

Действительно — если включаешь один и тот же файл несколько раз — он увеличивает размер приложения. Впрочем, это логично — подключаешь же ты под разными классами. Flex не считает себя в праве проверять, на один ли они все файл ссылаются :).
3. PopUpManager.centerPopUp() не подошло?
Честно говоря, даже не пробовал. Я переделывал из Alert, а там было сделано именно так. Я думаю, у них были какие-то веские причины не использовать centerPopUp().
Сразу бросилась в глаза функция clear, которая «чистит» массив. Не знаю как с другими языками, но с флешем — чистка массива методом arr = new Array(); приводит к выделению ему дополнительной памяти. Лучше в while пока длина массива > 0 делать pop();. Хотя в этом случае это не столь важно.
Я на самом деле полагался на сборщик мусора :). У меня есть подозрение, что если делать для каждого элемента pop(), то может получиться менее производительно по скорости и распределению памяти.
Возможно, не спорю. Просто у меня была ситуация, когда чистил массивы таким же методом (их было порядком не мало), начинало притормаживать. Как раз while и спас ситуацию. А еще быстрей работает в данной ситуации do..while. Не знаю почему сборщик не справился со своей задачей. Просто говорю как было :)
С массовым эмбедингом ресурсов вам может помочь метапрограммирование. Напишите простейший скрипт на php, ruby или даже вижуал бейсике, который будет генерить as файл с эмбед директивами для всех файлов в директории.

С локализацией — дело вкуса конечно, но я не уверен что с вашим классом корректно сработают все биндинги при динамической смене локали.

Модальное окно центруется именно centerPopUp(), то что в коде фреймворка по другому — это просто один из бесконечной череды примеров индусского когда в худшем смысле там.

Вот сделайте базовый класс для окошка, с эффектом «распахивания» — это задача и полезней и познавательней. В конце концов это флэш, и надо чтобы это было видно — нужна не навязчивая динамика и анимация.
Ну с массовым эмбедингом — примерно так и получилось. С локализацией — согласен. Модальное окно — возможно, Вы правы — попробую переделать. Эффект «распахивания» — это чтобы оно из точки как-бы раздвигалось в конечное положение?
Не просто раздвигалось :) Чтобы смотрелось не скучно, окно должно стартовать с 30-40% размера, с ускорением распахнуться до 120%, а потом стать на 100%. Общая длительность около полусекунды. И в обратном порядке при закрытии. Тогда это выглядит не так уныло, как просто «тык, появилось».

Привязываться к статик методам для создания окна (метод show у Alertа) тоже не очень практично. Т. к. его нельзя унаследовать. Обычно у вас куча окон, которые различаются только содержимым, а так как класс для каждого будет свой, и придется статический show реализовать в каждом из них
> Тогда это выглядит не так уныло, как просто «тык, появилось».

«Тык, появилось» — лучший метод показа окон, imho.

Визуальные примочки интересны только первые полчса, потом они начинют раздражать. К тому же, добавлять к открытию окна аж полсекунды — минус к юзбилити.
Хорошая статья, подробненько так для начала, а кому надо дальше сами раскопают.

Еще хорошо бы о применении Flex для реальных приложений с учетом производительности — как сделать наиболее оптимальное многомодульное приложение.
Спасибо. Как только доделаю свое приложение — попробую потестировать на производительность и, возможно, тогда опишу, что получилось.
Вот спасибо за статью. Не могу сказать, что сильно помогла в чем-то, но кто знает, когда и с чем конкретно придется столкнуться. А в условиях явного дефицита русскоязычных мануалов и книг по Flex, любая информация лишней не будет. Еще раз спасибо.
*с довольной усмешкой* теперь однако флекс — тематика хабра :) habrahabr.ru/blogs/flex/38475/#comment_913223
Отличная статья. Как раз для начинающих флексеров. Автор наступил на многие грабли — молодец, это хороший опыт.

Можно высказать пожелание? Было бы очень здорово, если бы приходящие из Си программисты постарались делать по-меньше культа вокруг отчистки памяти. Единственное, что надо делать — это не оставлять ссылок на неиспользуемые объекты и все. Всякие хаки по форсированию GC и прочее — это от лукавого.

Еще, по-возможности, не называйте методы с заглавной буквы и используйте CamelCase для разделения слов в названиях. Только не расценивайте это как упрек — это пожелание. Вот есть например замечательная библиотека Box2D, портированная из Си во ActionScript, но с сохранением кодинг-конвенций из Си. Флэшерам с ней очень трудно работать — постоянно глаза режет.

А вообще замечательно, что в блог «Adobe Flex» начали активно писать.
И тем не менее, бывает, что уберешь аккуратно все ссылки, все листнеры, у всего чего только можно dispose повызываешь и т. п., а память не освобождается. А ткнешь garbage collector, и сразу становится хорошо :) Понятно, что хак — он и есть хак, сегодня работает, завтра не работает (в лучшем случае, а в худшем все ломает), но все-таки мы живем в реальном мире, приходится искать компромисы между хорошем стилем и производительностью :)
Мда, почитал я тут статьбю и комменты… ну и извраты приходится вам применять, да и тормозит все это наверно. Ну ее нафик, такую кривую технологию((( Я по крайней мере флекс-приложениями теперь точно пользоваться не хочу(
Кстати, мое впечатление от Флекс очень положительное :)). Действительно, то что я описал — лишь некоторые сложности, с которыми я столкнулся.

А если писать, в чем Флекс облегчил мне жизнь — одного поста не хватит.

Я бы Вам все-таки посоветовал попробовать по-работать с ним ;).

тоже совсем недавно начал изучать флекс и тоже впечатления очень положительные, затыки переодически возникают, но всё решаемо. из последних например, не удалось убрать реакцию на фокус и овер во воженном рендерере, то есть есть лист у него есть рендерер, тот в свою очередь для отображения одного из елементов данных вызывает HorizontalList со своим рендерером. В итоге потратил час, а потом переписал на AS через цикл и addChild, вроде нормально, но отображается заметно медленнее. не подскажете? ))))
большое спасибо за метод локализации
Всегда пожалуйста :).
Обычной практикой является отделение всех ассетов от кода. В таком случае не нужно будет перекомпилировать приложение каждый раз, когда поменяется картинка, текст или стиль. То есть правильнее, хотя и гемморнее, было бы создать хмл со ссылками на картинки, и грузить их в рантайме. А хмл уже генерить из пхп на лету или с помощью jsfl во флеше.
А, еще картинки можно было сохранить в флеш-библиотеку .swc и из нее уже таскать. Это кстати по сути тот же зип архив с вложенными ассетами.
Именно так сейчас и делаем — храним ресурсы в swf или swc. Но на тот момент с Flash CS я не разбирался и пытался решить проблему исключительно методами FlexBuilder.

Также для той задачи вариант грузить что-либо в рантайме не подходил.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории