![]() |
Нагрузка на ЦП
Добрый день! Есть проблема, во флешке создается много объектов, которые перемещаются, вращаются и взаимодействуют друг с другом. От этого процессор нагружается и начинает тормозить. Причем загружается он всего на 25% (процессор Core2 Quad), там как раз 4 потока и флеш занимает полностью один из этих потоков. Полазив в интернете, я нашел, что разве некоторые фильтры и видео могут работать в другом потоке, что собственно особо не помогает, остальное вычисления и отрисовка идут в одном потоке.
Может кто-нибудь слышал, есть какие-нибудь хитрости чтобы это ускорить или как-нибудь обойти? весь код, особенно критические моменты оптимизированы, но флешка работает в некоторые моменты на пределе возможностей. |
Скорость рендера на флэш - это его больное место.
Есть набор хитростей для ускорения рендера (основанные в основном на том, что просто битмапа рендерится быстро, т.е. cacheAsBitmap для неотскейленных и не вращающихся работа всяко разная с битмапами итп.). Это вообще-то всё гуглится и тут в поиске тоже находится. Есть AGAL, который рендерит на видеокарте (но работа с ним отличается от работы с остальной графикой). |
думаю тут скорее оптимизации кода больше внимания уделить надо...
ЗЫ: у меня вообще влешка больше 8% кушать не может =) все подвижные элементы(если они не должны с пользователем контактировать) делаешь в невидимом спрайте... который потом после всех перемещений отрисовываешь в битмапу методом draw()... так работает на порядок быстрее чем даже просто chageAsBitmap |
cacheAsBitmap и другие хитрости я конечно использую, везде где возможно заменил Array на Vector, вызовы элементов массивов все идут по ссылке, все что уходит за пределы видимости либо удаляется совсем, либо просто удаляется со сцены и т. д. И, в принципе, от первоначальных показателей это дало существенный прирост, однако не решило проблему.
Цитата:
|
Цитата:
|
Можете через один, если вам хочется :)
Но имелось в виду в каждом. Как же иначе? С некоторыми извращениями можно заставить и реагировать с пользователем. Если перемещение в контейнере не добавленном в список отображения, то getObjectsUnderPoint вам в помощь. Получаем список объектов при мышином событии, которое поймал вьюпорт и вручную диспетчим от самого верхнего чайлда. Метод возвращает только объекты самого нижнего уровня иерархии отображения, поэтому появляются свои тонкости реализации. Если используете блиттинг (то есть вообще без дисплейобджектконтейнеров, а своя иерархия), то Bitmapdata:hitTest вам в руки. |
Цитата:
|
Цитата:
|
Вообще-то наоборот. Это энтерфрейм затупливает.
То есть, начинает реже рассылаться. А таймер фигачит через фиксированное время вне зависимости от фокуса. |
А зачем вам всем ENTER_FRAME? Обновление экрана делается по просьбе представлений. Старшая из них делает stage.invalidate(). А остальные рендерят по Event.RENDER.
|
| Часовой пояс GMT +4, время: 10:50. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.