![]() |
Об оптимизации графики(растр/вектор) и анимаций
Коллеги вот такой вопрос к игроделам, которые собаку на этом съели, что будет быстрее работать. У самого очень мощный комп, и тесты провести сложновато.
Рендерим 100 кадров 3д анимации, просто тупо 100 картинок, размером от 100*100 до 300*300 например. Загоняем во флеш. Запускаем таймер на 50-100 мс 1) Мы добавим сразу все 100 картинок в спрайт и будем менять visible по очереди. 2) Мы будем делать addChild/removeChild 3) До импорта, создаем одну большую битмапу как спрайтшит ( получается если 100 картинок по 300 (10х10) , 3000 * 3000 битмапка) добавляем ее и под маской меняем x-y битмапки 4) Аналогично пунтк 3, только добавляем одну битмапку 300*300 и потом методом draw из большой получаем bitmapData которую скармливаем этой битмапке. 5) ваш варинат Какой из варинатов будет самым шустрым? ( мне кажется 1й будет быстрее, так как мы сразу забиваем память нужным кол-вом, и держим ее пока анимируем, чем например посл варинат, так как каждые 50 мс делать draw будет напрягать проц еще, - но могу сильно ошибаться ) -------------- Отдельный вопрос по шейпам (статика). Допустим мне надо зарисовать ( программно ) 1000 шейпов, различные фигуры. Будет ли правильным после такой зарисовки, сделать draw общего контейнера и добавить как одну битмпаку, а зарисованные шейпы просто удалить, заодно вписав их в null ? |
5)Загнать большую битмапдату в Bitmap и выставить ей scrollRect.По идеи это оптимизированный метод как раз для таких задач.
Цитата:
|
draw() медленный, самым шустрым считается copyPixels().
|
Цитата:
Цитата:
|
А если сделать массив из 100500 экземпляров BitmapData и при каждой итерации bitmapData одной единственной Bitmap будет ссылаться на текущий кадр?
|
Цитата:
Цитата:
Думаю copyPixels и scrollRect дадут одинаковые результаты, но у copyPixels оверхед по памяти меньше. Тесты никто за тебя делать не будет. |
Цитата:
|
Каждый кадр отрисовать в отдельную битмапдату, кинуть их все в массив. Дальше в одной bitmap менять битмапдату на значение из массива. Чем плох этот способ по сравнению с маской и скроллом?
Добавлено через 6 минут Пример кода 5-ти летней давности, нарезает длинную .png c кадрами на битмадаты и затем проигрывает их. Код AS3:
|
Вложений: 1
Пример портянки с кадрами
http://www.flasher.ru/forum/attachme...1&d=1520198995 |
Для одинаковых объектов можно создать глобальный массив с кадрами-битмапдатами, но возможно для этого уже есть отдельная оптимизация в самом ФП, я не проверял.
|
Спасибо!
Добавлено через 2 часа 2 минуты Bletraut - а чем фактически будет отличаться, если я допустим в массив пихну не битмапДаты, а битмапки сразу, и точно так же буду делать как b = new Bitmap(index[i]), addChild(b) каждый кадр? Какая разница? |
Возможно, что bitmap будет занимать больше памяти и addChild будет происходить медленнее. Надо сделать тесты, но тот подход что я привел уже опробован.
Добавлено через 4 минуты Когда я занимался этим вопросом, насколько я помню, то хранение bitmap'ов вызывало лаги, но возможно в технологии ФП уже что-то изменилось. |
Вложений: 1
|
Цитата:
2. Для смены кадров ты постоянно перестраиваешь дерево отображаемых объектов ИЛИ держишь их всех на сцене (клацая видимостью). В случае же с подменой bitmapData у тебя один DO на анимацию. P.S. Разумеется, при подмене bitmapData меняются габариты Bitmap, которые вроде как надо пересчитать. Но если в плеере все реализовано по уму, пересчет должен происходить лишь по первому требованию (getRect, getBounds и т.д.), а не сразу после того, как они заведомо стали неактуальными. |
| Часовой пояс GMT +4, время: 16:14. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.