|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
СacheAsBitmap как оно происходит.
Узнал что маски на объекты с дырками, можно делать только с кешированием маски и маскируемого объекта.
В хелпе написано, что cacheAsBitmap подходит для неизменяемых объектов, что увеличивает производительность. Но я делаю маску движущейся и получается, что cacheAsBitmap происходит 60 раз в секунду... И в связи с этим вопрос появился о том, что происходит с этим кешем после. Кеширование это - поместить значение пикселей в память? А если я для одного объекта второй, третий раз буду делать кеш, выгружать не чего не надо? Добавлено через 2 часа 6 минут И ещё хочется спросить у тех, кто это уже прошёл - есть смысл в cacheAsBitmap, когда внутри контейнера масштабируются и вращаются? А то получается маску не сделать без кеширования, а мне маска нужна для обводки трансформируемых объектов. И я могу на недели уйти в эксперименты, вместо того, чтобы отрисовывать весь холст в bmd и уже в ней через get-setPixel менять пиксели по координатам этой рамки. Что будет предпочтительней? |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Рисую дырявый shape и выставляю его в качестве маски для контейнера со всякими рисунками..
Мне вот куда больше интересует, что происходит при этом кеше. Если я буду на синим фоне двигать зелёный квадрат и каждый кадр сохранять его в bmd, то я понимаю что происходит и то, что я могу зелёный квадрат вращать и скейлить, это не как не скажется на bmd. Но вот про кеш написано, что лучше не делать с трансформируемыми объектами, его. То что он даже может и не работать... Нет какой-то уверенности в нём. Наверное этот метод, для облегчения процесса растрезации... |
|
|||||
Lorem ipsum
|
Этот метод не для облегчения процесса растеризации, а для его оптимизации. Все в конечном счете приходит к растру. Флаг cacheAsBitmap позволяет "запекать" контент экранного объекта в растр сразу. Если ты этот объект будешь только двигать, но не вращать и не масштабировать, то использовать cacheAsBitmap разумно. Если же предполагаются обильные трансформации, то кэширование будет лишь ухудшать качество анимации за счет лишнего движения — копирование из кэша в буфер экрана.
ИТОГО: Если контент DO (очень "составной" И/ИЛИ векторный) И (контент DO не меняется) И (сам DO только перемещается, но не вращается/масштабируется), cacheAsBitmap положительно скажется на качестве анимации.
__________________
Поймай яблоко 2! |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Zebestov Спасибо! Именно так я и прочёл с какой-то статье, но написана она была не совсем доступным языком и я нуждался в подтверждении.
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Надо еще упомянуть про то, что дырку можно сделать НЕ дыркой, оставив к ней проход, то есть векторный контур сделать полностью замкнутым. Естественно, не всегда, но для прямоугольной рамки это проще простого.
Дело ведь в том, что маска рассматривает накладывающиеся контуры как один. То есть, если у Вас два квадрата где-то пересекаются, маска "создает" некий общий контур. А если один квадрат полностью вместит другой, то общий контур будет контуром бОльшего квадрата. Так и с дыркой — она просто второй контур. И поскольку она "вмещена" в первый, то и не рассматривается маской.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 18.01.2014 в 15:55. |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Wolsh Спасибо! Честно сказать ... тут я хотел написать, что вообще не понял, даже после, приблизительно, десяти прочтений, но в момент написания до меня дошла суть.
И я отказался от идеи с маской, решил сохранять контейнер в bmd и рисовать рамку уже на ней, рассчитывая трансформацию для рамки "в уме" и попутно изменять тональность цвета. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Чего тут... понимать то надо простую вещь — что такое контур. Это замкнутая линия. А дырка не является частью контура большого квадрата. Это отдельный самостоятельный контур. Не удивлюсь даже, если он находится на отдельном слое графикса (не знаю, как проверить). Вы знаете, что у графикса есть слои? Просто нет api для обращения к ним. Но каждый новый контур рисуется на отдельном слое, как "группы" в IDE. Это легко проверить — нарисуйте в шейпе большой квадрат, сделайте endFill() и нарисуйте в нем квадрат поменьше тем же цветом. Наивное восприятие говорит нам, что остался только первый квадрат, а второй слился с ним и отдельно не существует. Теперь задайте шейпу альфу 25% и увидите, что альфа применилась отдельно к каждому "слою" и маленький квадрат стал виден — он никуда не исчезал.
__________________
Reality.getBounds(this); |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Да, действительно... И получается, что маска с дыркой без кеша не работает, так как слои не учитываются..
А кеш их сливает.. Спасибо! Теперь всё на свои места встало. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Получается так же, что если нарисовать квадрат с дыркой ОДНИМ контуром, то кэшировать в битмап необязательно.
Имеется ввиду, рисовать не О, а С, то есть не два замкнутых контура, а один. Но так, чтобы "концы" совпали по координатам и "прорезь" не было видно.
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 16:01. |
|
« Предыдущая тема | Следующая тема » |
|
|