![]() |
|
||||||||||
|
|
|
|||||
|
Дамы и господа, прошу совета/помощи, т.к. даже не знаю что искать и в какую сторону копать. В готовом приложении обнаружился баг (функционально практически не значимый, но достаточно существенный и неприятный). Описываю ситуацию:
Есть контейнер. В контейнер (пусть Базовый) грузится циклом значительное количество объектов (пусть Блоков), которые из себя представляют мелкие картинки (из самого приложения, не из вне), текстовые поля, спрайты с рамками (drawRectangle). Количество блоков может быть существенным (к примеру до 1000 и более, но более чем на пока 600 не тестирую). Ни на Блоки, ни на Базовый контейнер не подписаны никакие слушатели. Только на Базовый наложена маска. Проблема в том, что при наведении мышки на Базовый контейнер (справедливо поставить знак равенства с маской, если это важно) нагрузка на процессор увеличивается до 100%. Как только убираю нагрузка снижается до исходных значений. При этом на экране ничего не меняется (и не должно). Собственно вопрос в том как победить рост нагрузки на проц и за счет чего это происходит? ЗЫ. постарался наиболее подробно и полно описать проблему, если что-то нужно еще - дополню. ЗЗЫ. проект коммерческий, и значительный по общему объему кода, поэтому с примерами кода не получится, увы ![]() ЗЗЗЫ. Flash CS3. Заранее спасибо, буду рад любым подсказкам.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
mouseEnabled, mouseChildren, не грузить 1к объектов одновременно.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Psycho Tiger, первые 2 совета (хотя пожалуй только первый) позволили снизить нагрузку на проц до 80%. По поводу не грузить 1к - к сожалению не тот вариант. Точнее он возможен, но крайне не желателен. К тому же одновременно отображается (за счет маски) всего 4 объекта, ну может 6. Везде статика, никакой интерактивности и прочих наворотов.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Цитата:
То есть, если маска - это некая "кривая" (а еще есть слово "произвольная", но тогда будет совсем как в учебнике) фигура, то нужно получить прямоугольник, ее описывающий (getBounds() f.e.???) и удалить из списка отображения все объекты, лежащие за пределами этого прямоугольника и не пересекающиеся с ним. UP А еще можно отрисовать все что есть на сцене в адын_балшой_бытмап. Или в 2. Или по блокам. Количество детей уменьшится само собой. А если этой битмапе еще и сглаживание убрать (и двигать маску/битмапу только на целое число пикселей) - тут оно должно взлететь! =)
__________________
...вселенская грусть Последний раз редактировалось gloomyBrain; 19.02.2010 в 00:44. |
|
|||||
|
gloomyBrain маска и есть прямоугольник. Какой тогда смысл в getBounds?
Цитата:
Я вот не могу понять почему нагрузка увеличивается именно при наведении мыши, даже при учете совета Psycho Tiger. Поведение проигрывателя для меня по прежнему остается загадкой. Такое впечатление, что там сидит миллион слушателей и отлавливает какое-то мышиное событие, но откуда ему (слушателю) взяться, если я его не назначаю...
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Регистрация: Jun 2006
Сообщений: 400
|
В событиях mouseMove, если используете stopPropagation, попробуйте убрать. Мне однажды это помогло избавится от похожей(да собственно точно такой же) проблемы.
|
|
|||||
|
1. Не отображайте объекты которые не попадают под маску.
2. Вместо маски можно использовать scrollRect, если не ошибаюсь он работает побыстрее.
__________________
O God! The Aftermath. |
|
|||||
|
Тогда лучше в один большой битмап, смотреть куда кликнули, вычислять на какую фотку и загружать большую фото.
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|