Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Фильтры и быстродействие. (http://www.flasher.ru/forum/showthread.php?t=140278)

inferrum 25.05.2010 17:35

Фильтры и быстродействие.
 
Всем привет.Задача следующая.
Имеется спрайт в который каждый фрейм рисуются линии.
Каждый раз меняется их длина и местоположение.
После этого к спрайту(то бишь ко всем отрисованным линиям) применяется фильтр Glow, что приводит к капитальным тормозам.
Я вот подумал может можно как-то оптимизировать этот процесс или добиться того же результата другими способами без использования фильтра?

gloomyBrain 25.05.2010 17:44

Ну да
Можно разделить линию на составляющие 2-х типов: середина и конец
Далее, можно нарисовать середину (кусочек линии с "уже примененным" GlowFilter) - то есть BitmapData в которую скопирован внешний вид середины
То же повторить для конца линии
Составить много-много линий из полученных кусочков (graphics.beginBitmapFill())

Zebestov 25.05.2010 18:57

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

inferrum 25.05.2010 19:04

Цитата:

Сообщение от gloomyBrain (Сообщение 910821)
Ну да
Можно разделить линию на составляющие 2-х типов: середина и конец
Далее, можно нарисовать середину (кусочек линии с "уже примененным" GlowFilter) - то есть BitmapData в которую скопирован внешний вид середины
То же повторить для конца линии
Составить много-много линий из полученных кусочков (graphics.beginBitmapFill())

Идею понял, а вот как это реализовать понимаю не до конца.
Хорошо бы немного кода...

Цитата:

Сообщение от Zebestov
чую что проблема в куче линий, а не в фильтре.

Без фильтра всё работает быстро.
Цитата:

Сообщение от Zebestov
дорисовывать каждую новую линию в спрайт и тут же отрисовывать его в прозрачную битмапдату?

И что это даст?

proxiServer 26.05.2010 10:17

Цитата:

Идею понял, а вот как это реализовать понимаю не до конца.
Хорошо бы немного кода...
Вам дали направление. Учитесь копировать часть клипа в bitmapData. Изучите graphics.beginBitmapFill()

-De- 26.05.2010 11:25

Метод gloomyBrain действительно быстрый (ещё бы и в битмапу рисовать), но, например, пересечение линий будет рисовать некорректно - свечение одной линии перекроет другую.
Я бы попробовал примерно как советует Zebestov. Т.е. рисуем линию в спрайт, спрайт "рисуем в битмапу" к которой применён фильтр, чистим спрайт.
Без фильтра работает быстро возможно т.к. установка фильтра включает cacheAsBitmap. С включенным cacheAsBitmap при изменении спрайта тормозной векторный рендерер перерисовывает всю кучу линий во внутреннюю битмапу. Т.е. возможно тормозит не столько из-за фильтра, сколько из-за cacheAsBitmap=true у спрайта. Ну и там не забыть качество фильтру поменьше. А вообще хоть бы код тормозящий кинули на поковырять)

Zebestov 26.05.2010 16:08

Цитата:

Сообщение от -De- (Сообщение 911014)
С включенным cacheAsBitmap при изменении спрайта тормозной векторный рендерер перерисовывает всю кучу линий во внутреннюю битмапу.

очень правдоподобно. автор — попробовал как я говорил? тут дело в том, что не я это придумал — этот популярная тактика в подобных случаях.


Часовой пояс GMT +4, время: 22:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.