Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Нагрузка на ЦП (http://www.flasher.ru/forum/showthread.php?t=176333)

Djay 07.03.2012 18:12

Нагрузка на ЦП
 
Добрый день! Есть проблема, во флешке создается много объектов, которые перемещаются, вращаются и взаимодействуют друг с другом. От этого процессор нагружается и начинает тормозить. Причем загружается он всего на 25% (процессор Core2 Quad), там как раз 4 потока и флеш занимает полностью один из этих потоков. Полазив в интернете, я нашел, что разве некоторые фильтры и видео могут работать в другом потоке, что собственно особо не помогает, остальное вычисления и отрисовка идут в одном потоке.

Может кто-нибудь слышал, есть какие-нибудь хитрости чтобы это ускорить или как-нибудь обойти? весь код, особенно критические моменты оптимизированы, но флешка работает в некоторые моменты на пределе возможностей.

-De- 07.03.2012 18:30

Скорость рендера на флэш - это его больное место.
Есть набор хитростей для ускорения рендера (основанные в основном на том, что просто битмапа рендерится быстро, т.е. cacheAsBitmap для неотскейленных и не вращающихся работа всяко разная с битмапами итп.). Это вообще-то всё гуглится и тут в поиске тоже находится.
Есть AGAL, который рендерит на видеокарте (но работа с ним отличается от работы с остальной графикой).

dsQuadro 07.03.2012 18:30

думаю тут скорее оптимизации кода больше внимания уделить надо...
ЗЫ: у меня вообще влешка больше 8% кушать не может =)

все подвижные элементы(если они не должны с пользователем контактировать) делаешь в невидимом спрайте... который потом после всех перемещений отрисовываешь в битмапу методом draw()... так работает на порядок быстрее чем даже просто chageAsBitmap

Djay 07.03.2012 18:46

cacheAsBitmap и другие хитрости я конечно использую, везде где возможно заменил Array на Vector, вызовы элементов массивов все идут по ссылке, все что уходит за пределы видимости либо удаляется совсем, либо просто удаляется со сцены и т. д. И, в принципе, от первоначальных показателей это дало существенный прирост, однако не решило проблему.

Цитата:

Сообщение от dsQuadro (Сообщение 1067718)
все подвижные элементы(если они не должны с пользователем контактировать) делаешь в невидимом спрайте... который потом после всех перемещений отрисовываешь в битмапу методом draw()... так работает на порядок быстрее чем даже просто chageAsBitmap

это делать на каждом ENTER_FRAME?

Monade 2 09.03.2012 16:42

Цитата:

Сообщение от Djay (Сообщение 1067722)
это делать на каждом ENTER_FRAME?

присоединяюсь к вопросу

ChuwY 09.03.2012 17:16

Можете через один, если вам хочется :)
Но имелось в виду в каждом.
Как же иначе?
С некоторыми извращениями можно заставить и реагировать с пользователем.
Если перемещение в контейнере не добавленном в список отображения, то getObjectsUnderPoint вам в помощь. Получаем список объектов при мышином событии, которое поймал вьюпорт и вручную диспетчим от самого верхнего чайлда. Метод возвращает только объекты самого нижнего уровня иерархии отображения, поэтому появляются свои тонкости реализации.
Если используете блиттинг (то есть вообще без дисплейобджектконтейнеров, а своя иерархия), то Bitmapdata:hitTest вам в руки.

terbooter 09.03.2012 22:23

Цитата:

Сообщение от Djay (Сообщение 1067722)
это делать на каждом ENTER_FRAME?

Тоже присоединяюсь к вопросу

dsQuadro 10.03.2012 20:10

Цитата:

Сообщение от terbooter (Сообщение 1068072)
Тоже присоединяюсь к вопросу

как уже ответил ChuwY можно через один... но если серьезно то да, в каждом кадре... хотя я предпочитаю не по энтерФрейм, а по таймеру все это делать...

ChuwY 10.03.2012 21:43

Вообще-то наоборот. Это энтерфрейм затупливает.
То есть, начинает реже рассылаться.
А таймер фигачит через фиксированное время
вне зависимости от фокуса.

dimarik 10.03.2012 21:46

А зачем вам всем 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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.