12/06/2009

Необъятный Blur

Опубликовано в: Эксперименты — Тэги: , , , , — Nicolas Prof @ 14:06

Были ли у вас случаи, когда ограничения Flash не позволяли использовать фильтр?
Есть очень простой обходной путь. Если нам не разрешают применить фильтр к самому объекту, значит применим к его детям. Метод работает быстро, так как применение фильтра довольно таки быстрая операция. В этом можете убедиться в примере. Так же есть зависимость, что количество детей фильтруемого объекта прямо пропорционально кратности замедления процесса, т.е. если 100 детей, то время применения фильтра будет в 100 раз медленней. Вместо 10мс, будет 1сек при 10 000 итераций, согласитесь, что столько итераций в секунду в работающем проекте невозможно, так что у нас в запасе хорошие резервы, и мы вполне вольны использовать такую технику с каким либо Tween движком.

Смотреть в действии

P.S.
Кнопка Broke Holder, изменяет габариты спрайта на 5000 рх.

03/06/2009

Tips & Tricks 1

Опубликовано в: Опыт — Тэги: , , , — Nicolas Prof @ 19:17

Как и ранее обещал, начинаю рубрику полезных советов, наблюдений и уклонов от граблей. Поехали.

  1. Есть форма построенная на собственной разработки UI компонентах, очень любимых нами, или может даже с помощью стандартных компонентов, которые кстати очень даже качественно написаны. И при отправке формы, или при каких либо других действиях требующих от нас временного блокирования формы кто то возможно попробует перебрать список UI компонентов, и если это наши компоненты вызвать некий метод ui.active = false, или если стандартные, то ui.enabled = false. Но такая операция трудоемкая, совсем никому не нужный лишний цикл, плюс ко всему ошибки, если форма сложная, то еще и проверки. Так вот, делать это все не надо, потому как есть намного изящный и на порядок более быстрый подход, а так же из-за простоты реализации еще и снижающий вероятность ошибки. Для блокировки форм, и любых других интерактивных объектов, лучше всего использоваться Sprite. Если необходимо показать какое то модальное окно, то просто добавляем на Stage, наш блокирующий слой, у меня как правило он называется незамысловато _blockLayer. Блокирующий слой заливается посредством Graphics любым цветом с полной прозрачностью и не одно MouseEvent событие не пройдет сквозь блокирующий слой. А еще более быстрый способ, это не использовать Alpha, а использовать BlendMode. Так же закрашиваем блокирующий слой черным (кто не знает, это 0 или умнее 0х000000), и ставим _blockLayer.blendMode = BlendMode.ERASE.
  2. Отдавайте предпочтение маскам реализованным за счет Rectangle, т.е. anyDisObject.scrollRect = new Rectangle(0,0,100,50). Но не забывайте, для премущества от ScrollRect необходимо маскируемый объект кэшировать как изображение cacheAsBitmap = true. Есть несколько неудобств при использовании ScrollRect – при перемещении, необходимо постоянно обновлять прямоугольник anyDisObject.scrollRect = _dynamicRectangleRef, ну и естественно, что бы не создавать каждый раз новый объект, правильно изначально создать Rectangle, и менять нужные нам параметры: x, y, width, height.
  3. Перед удаление объекта с Display List, сделайте объект невидимым, objToDelete.visible = false. Освободите немного памяти, которой всегда нехватает.
  4. Если ссылке на объект типа Sound назначить null, то тяжелый объект будет сразу высвобожден с памяти.
 

Меню:
Twitter Updates:
    Архив:
    Управление:
    Flash & Flex знакомые: