![]() |
Оптимизация вращения спрайта с детьми без запекания
Нужно вращать вокруг геометрического центра спрайт, в котором порядка двух десятков детей, каждый из которых внутри себя содержит бэк (Image) и текстовое поле. Что-то типа колеса фортуны. На устройствах дергается. Умом понимаю, что это из-за последовательного пересчета всего этого зоопарка, значит решение в том, чтобы запечь колесо в одну текстуру, сделать Image и крутить его.
Но может есть какой трюк, чтобы обойтись без запекания? Цвета секторов и значения текстовых полей все время разные, так что заранее не заготовить. Вращаю по энтерфрейм 60FPS (или сколько там устройство из себя выжмет), приращение угла 0.01. Добавлено через 1 час 4 минуты Кстати, а у нас есть возможность выдернуть битмапдату загруженных изображений текстур? Чтобы собрать итоговую текстуру по частям. Попробовал отрисовать в битмапдату собранное колесо целиком как предлагается в этой теме: http://flasher.ru/forum/showthread.php?t=210617 влетел в ту же проблему с размерами вьюпорта. |
Цитата:
Проблема с размерами решается переписыванием кода в классе Starling, в методе updateViewPort() (где-то в районе 530й строки) и изменением режима отрисовки на BASELINE_EXTENDED или BASELINE. Это так, к слову. Я лично от этой идеи отказался совсем Собственно, можно изменить код на такой: Код AS3:
|
Интересно, попробовал через RenderTexture, но гладкости не получилось.
|
А с чего вы взяли что там что то пересчитывается?
Sprite + Image + TextField - статичные штуки, если вы не меняете каждый кадр текст или еще чего то. Пересчитать матрицы для поворота даже с сотнями детей, не должно вызывать нагрузки на CPU. |
Цитата:
На практике, спрайт содержащий множество элементов, пусть даже просто Image, работает медленее, чем тот же спрайт, если у него вызвать метод flatten() |
а сколько элементов и полей? сделаю тест вечером
|
Цитата:
Как было у меня: 3 слоя (спрайта) - задний параллакс, средний слой, который непосредственно под контейнером с персонажами, и передний параллакс. Все эти 3 слоя наполняются объектами Image, которые создаются на основе текстурного атласа. Всего около 200 - 250 элементов. Запускаю игру на телефоне, вижу, что фпс в районе 45 - 50 все время. При перемещении провисает до 35 - 40 (ну, естественно там не только эти спрайты двигались, но не суть). Первое, что сделал для оптимизации - вызывал у всех трех слоев flatten(). Результат - фпс 55 - 60 стабильно. Что, в принципе, логично. Или программе надо пересчитать одну матрицу, или пробежаться по списку и пересчитать матрицы для всех объектов |
Цитата:
1. бэк колеса - текстура с кругом 500х500 (радиус круга 250) 2. 12 треугольных секторов круга, каждый из которых содержит бэк (текстура в виде треугольника с альфой) и текстовое поле с применением нативного фильтра Glow (для эффекта обводки символов). Но, после того, как я отрисовал колесо со всем зоопарком в RenderTexture, сделал Image и начал его крутить, гладкости вращения все равно не получилось. Поэтому я начинаю думать, что неправильно организовал вращение. Например, вращать не по флешовому ENTER_FRAME, а брать данные для вращения с жонглера. |
Tween лучше для вращения.
|
Мне нужно вращать, потом замедлять, потом останавливать с эффектом отскока.
При этом время вращения заранее не известно. Добавлено через 1 час 5 минут Нет, чего-то не выходит у меня это вращение. Все равно дергается. Пробовал через Tween: Код AS3:
Код AS3:
Гладко выглядит только если FPS строго 60. Если хотя бы 45 - уже начинаются совершенно неприличные рывки. Сам класс WheelStarling: Код AS3:
Текстура спиц ('spokes') - это изображение 500х500. |
| Часовой пояс GMT +4, время: 23:59. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.