Форум 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=136511)

TanaTiX 18.02.2010 21:10

Мышь и нагрузка на проц.
 
Дамы и господа, прошу совета/помощи, т.к. даже не знаю что искать и в какую сторону копать. В готовом приложении обнаружился баг (функционально практически не значимый, но достаточно существенный и неприятный). Описываю ситуацию:

Есть контейнер. В контейнер (пусть Базовый) грузится циклом значительное количество объектов (пусть Блоков), которые из себя представляют мелкие картинки (из самого приложения, не из вне), текстовые поля, спрайты с рамками (drawRectangle). Количество блоков может быть существенным (к примеру до 1000 и более, но более чем на пока 600 не тестирую). Ни на Блоки, ни на Базовый контейнер не подписаны никакие слушатели. Только на Базовый наложена маска. Проблема в том, что при наведении мышки на Базовый контейнер (справедливо поставить знак равенства с маской, если это важно) нагрузка на процессор увеличивается до 100%. Как только убираю нагрузка снижается до исходных значений. При этом на экране ничего не меняется (и не должно).
Собственно вопрос в том как победить рост нагрузки на проц и за счет чего это происходит?

ЗЫ. постарался наиболее подробно и полно описать проблему, если что-то нужно еще - дополню.
ЗЗЫ. проект коммерческий, и значительный по общему объему кода, поэтому с примерами кода не получится, увы :(
ЗЗЗЫ. Flash CS3.

Заранее спасибо, буду рад любым подсказкам.

Psycho Tiger 18.02.2010 21:14

mouseEnabled, mouseChildren, не грузить 1к объектов одновременно.

TanaTiX 18.02.2010 21:29

Psycho Tiger, первые 2 совета (хотя пожалуй только первый) позволили снизить нагрузку на проц до 80%. По поводу не грузить 1к - к сожалению не тот вариант. Точнее он возможен, но крайне не желателен. К тому же одновременно отображается (за счет маски) всего 4 объекта, ну может 6. Везде статика, никакой интерактивности и прочих наворотов.

gloomyBrain 19.02.2010 00:40

Цитата:

Везде статика, никакой интерактивности и прочих наворотов
Тогда можно программно скрыть то, что точно находится под маской.
То есть, если маска - это некая "кривая" (а еще есть слово "произвольная", но тогда будет совсем как в учебнике) фигура, то нужно получить прямоугольник, ее описывающий (getBounds() f.e.???) и удалить из списка отображения все объекты, лежащие за пределами этого прямоугольника и не пересекающиеся с ним.

UP
А еще можно отрисовать все что есть на сцене в адын_балшой_бытмап. Или в 2. Или по блокам.
Количество детей уменьшится само собой. А если этой битмапе еще и сглаживание убрать (и двигать маску/битмапу только на целое число пикселей) - тут оно должно взлететь! =)

TanaTiX 19.02.2010 02:36

gloomyBrain маска и есть прямоугольник. Какой тогда смысл в getBounds?
Цитата:

в адын_балшой_бытмап
Тоже не подходит. Сейчас, на эатпе тестов там нет ничего лишнего, но в дальнейшем туда будут грузиться фотки при клике по которым должно что-то происходить. Как вариант - наплодить такое же количество более простых Блоков только в местах предполагаемых кликов. Но разве это достойный вариант? ИМХО больше на убогую заплатку тянет. Или я не прав?
Я вот не могу понять почему нагрузка увеличивается именно при наведении мыши, даже при учете совета Psycho Tiger. Поведение проигрывателя для меня по прежнему остается загадкой. Такое впечатление, что там сидит миллион слушателей и отлавливает какое-то мышиное событие, но откуда ему (слушателю) взяться, если я его не назначаю...

proxiServer 19.02.2010 10:41

В событиях mouseMove, если используете stopPropagation, попробуйте убрать. Мне однажды это помогло избавится от похожей(да собственно точно такой же) проблемы.

dmitriev 19.02.2010 13:54

1. Не отображайте объекты которые не попадают под маску.
2. Вместо маски можно использовать scrollRect, если не ошибаюсь он работает побыстрее.

Psycho Tiger 19.02.2010 15:23

Тогда лучше в один большой битмап, смотреть куда кликнули, вычислять на какую фотку и загружать большую фото.


Часовой пояс GMT +4, время: 08:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.