Использование cacheAsBitmap для ускорения работы flash-приложений

Наверно, все, кто пробовали свои силы во Flash, сталкивались с необходимостью ускорения визуализации объектов на сцене флеш-ролика. Особенно остро эта проблема стоит для векторных рисунков, которые сами по себе очень требовательны к ресурсам. Кроме этого, векторные изображения часто содержат градиенты и полупрозрачность. Всё это крайне негативно сказывается на производительности Flash Player-а.

Обозначенную проблему с производительностью пытаются решать по-разному. Одним из способов является кэширование объектов с помощью стандартного свойства cacheAsBitmap. Делает это свойство именно то, что и заложено в его названии - сохраняет объект в виде его растрового представления, а с растром flash-плеер работает быстрее, чем с векторными изображениями. Данное свойство доступно в ActionScript 3.0 для объектов, наследующих от DisplayObject (смотри шпаргалку в «Список отображения в ActionScript 3.0»). А применяется оно невероятно просто...

Код ActionScript 3.0:

import flash.display.Sprite; var sprite:Sprite = new Sprite(); sprite.graphics.beginFill(0x000000,1); sprite.graphics.drawCircle(200,200,100); sprite.graphics.endFill(); addChild(sprite); /* включаем кэширование */ sprite.cacheAsBitmap = true; /* проверяем */ trace(sprite.cacheAsBitmap);

Как видите, чтобы включить кэширование, надо просто присвоить свойству cacheAsBitmap булево значение true.

Что же даёт использование cacheAsBitmap на практике? Давайте посмотрим на примере...

Демонстрация работы cacheAsBitmap:

В данном примере имеется флеш-ролик с 1000-ю анимированных MovieClip-ов. Причём эти мувики не только векторные, но ещё имеют и градиентную заливку, и полупрозрачность. Естественно, ролик тормозит. В левом верхнем углу этого ролика, под счётчиком, имеется переключатель. С помощью этого переключателя можно включать/отключать кэширование мувиклипов. По умолчанию стоит false - кэширование отключено. А теперь включите кэширование. Что изменилось?

На самом деле даже без счётчика понятно, что с включённым cacheAsBitmap наш пример стал работать гораздо быстрее. Что и требовалось доказать.

Примечание:

[!] Что до счётчика в левом верхнем углу ролика, то он взят из урока «Мониторинг производительности flash-приложений». Там же расшифровываются все его показатели.

И всё бы было замечательно, если бы не было ограничений на использование cacheAsBitmap. А таких ограничений несколько:

- ограничение на размеры объектов;

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

- ограничение на манипуляции с кэшируемыми объектами;

Векторное содержимое кэшируемого объекта должно быть неизменным. Если оно изменяется, то происходит перерисовка растрового представления объекта. А это не только не ускоряет производительность флеш-ролика, а, наоборот, крайне негативно сказывается на производительности. Обратите внимание, что в приведённом выше примере объекты меняют свою позицию относительно системы координат, но их внутреннее содержимое остаётся неизменным.

- возможны ошибки из-за нехватки памяти для кэширования.

Cам пока не встречал, но так утверждается в хэлпе. Впрочем, это вполне понятная рекомендация, если учесть, что растровое изображение, как правило, занимает больше памяти, чем векторное.

Примечания:

[!] Учтите, что флеш-плеер автоматически кэширует те объекты, к которым применены фильтры (и до тех пор, пока к ним применены фильтры).

[!] О том, какие интересные эффекты можно получить, применив cacheAsBitmap к маске, упоминалось в статье «Градиентная маска средствами ActionScript 3.0».

Автор: admin

Дата добавления: 2012-04-03

Просмотров: 4992

Рейтинг поста: +8-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-03-19
Нет, автор не ошибся :-) А для оптимизации принято векторную графику переводить в растровую, а не наоборот.

Речь идёт не о размере готового флеш-ролика, а о нагрузке работающего флеш-ролика на ЦП вашего компьютера.

> Если я всё же не прав,поправьте, но флеш изначально работает с вектором

Изначально, да.
Комментатор
Комментарий добавил(а): Сергей
Дата добавления: 2013-03-19
Помойму автор ошибся в начале урока. РАСТРОВОЕ изображение требовательное, а вот ВЕКТОРНОЕ проще обрабатывается. Мы РАСТР переводим в ВЕКТР для упрощеня просчёта.

Если я всё же не прав,поправьте, но флеш изначально работает с вектором
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика