![]() |
Движение больших слоев фона
Все нет сил :wacko: было бы все супер, если бы не унылая оптимизация :( Перерыл интернет превратив браузер и рабочий стол в мусорку.
Ситуация такая: Входные данные: контейнеры размером примерно 3000х1000 с векторной графикой. Инициализация: создаю новые контейнеры с предыдущих но уже с растерезированным вектором и добавляю их на сцену. Старые контейнеры с их начинкой сравниваем с null. Итерация: контейнеры стоят на своих местах, с помощью clear(), Matrix() и beginBitmapFill() перерисовываю сохраненную битмапку в свой контейнер. При таком раскладе фпс падает до 16, если контейнеры убрать - получаю необходимые 28-31. Если при итерации ничего не перерисовывать и даже не двигать сцену - те же 16 (и область перерисовки - весь экран). Пробовал ограничить drawRect() размерами флешки, получил в ответ 14 фпс ((( Помогите, буду признателен. |
Цитата:
|
если нужен только скроллинг без изменения фона, рекомендую копать в сторону scrollRect, мега быстрая фича.
|
Код AS3:
|
Я поддержу, попробуйте scrollRect
|
Не уверен, но мне кажется, что bitmapData.draw будет быстрее, чем beginBitmapFill.
Причем если есть возможность отрисовывать содержимое контейнеров в одну битмапдату, то скорость должна сильно повыситься, т.к. плееру не прийдется обрабатывать наложение сложных дисплейобджектов. |
по поводу
Цитата:
|
Всем большущее спасибо!!! Пошел пробовать :)
|
Цитата:
Либо попытаться отрисовать дисплейобджекты в какую-нибудь битмапу: Код AS3:
Цитата:
|
если фон не масштабируется, не поворачивается, и сдвигается на целые пиксели, то bitmapData.copyPixels даст наилучшую производительность
|
Цитата:
Мне уже лень делать тесты, но, насколько я знаю, быстрее draw только copyPixels. |
Цитата:
|
copyPixels() действительно хорош, попробовал - появились впечатляющие результаты, scrollRect - вообще не вариант.
Но было бы неплохо если бы мне подсказали как избежать эффекта "победа пасьянс ХР" (наложение новых пикселей на старые) :( |
Конечно же, нужно очистить изображение. Например так:
Код AS3:
|
bitmapData.fillRect() то что надо для очистки экрана
но очистка нужна только если фон прозрачный, если фон без альфаканала, то достаточно нарисовать новаый фон прямо поверх старого. |
Когда я рисую в основной битмап через copyPixels() то следующее изображение режет все те что на уровень ниже прозрачными пикселями, как это обойти?
|
если я не ошибаюсь, то последний пареметр copyPixels - mergeAlpha отвечает за это
|
| Часовой пояс GMT +4, время: 11:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.