![]() |
Графика: Быстродействие. Оптимизация.
Я только начал осваивать АС3. Прошу помочь с трюками касательно производительности отображения.
Задача - нарисовать узоры. очень детализированные узоры, очень много, с анимацией) Алгоритм таков: -генерируются объекты деревьев и их веток. Каждое дерево и ветка состоят из кусочков, пускай это будут точки для простоты. -затем отрисовываю по 10 кусков каждого имеющегося дерева и ветки. -в процессе отрисовки генерятся новые деревья. Мое решение: Каждый сет (10 кусков отдельно взятой ветки) я рисую в шейп. Шейп addChild'ю к Sprite. И на каждый ENTER_FRAME отрисовываю Sprite. Получается довольно медленно. Я делаю что-то криво? Есть ли возможность ускорить процесс? Возможно правильнее работать с BitmapData? Спасибо |
Цитата:
я не знаю конечно вашей проблемы, но думаю вам бы стоило проследить и выяснить что можно удалить из какогото обьекта, возможно отписать от события или поставить определенные условия чтоб лишние действия не производились лишний раз, или если что то вы удаляете то потрудится обязательно отписать жит обьекты от слушателей соыбтий и ссылки приравнять к нулю. Изучить подробнее математическию модель, какая никакая думаю она у вас есть, избавиться от лишних вычислений и так далее. Оптимизация это исскуство, нужно досканально изучить свой проект. Посмотрите возможно вы где то через чур что то усложнили. пс. я не претендую на место мастера оптимизации ) |
Спасибо.
Интересует конкретика работы с графикой. |
Не создавайте, удаляйте часто объекты - используйте готовые экземпляры
|
Приветсвую всех. У меня схожая проблема (возможно ее обсуждение поможет автору вопроса тоже ): в ролике создается большое количество объектов Shape, они помещаются в контейнер (при этом есть необходимость перемещать контейнер). Запуск профайлера показал что больше всего времени при перетаскивании всех объектов тратиться на обработку [mouseEvent]. (двигаю контейнер по Event.ENTER_FRAME путем изменения координат спрайта) . Более того при увеличении шейпов простое движение мышки (над роликом) приводит к заметной нагрузке процессора. Т.о. я пришел к выводу что все шейпы "следят" за мышкой.
Возможные варианты решения проблемы: 1) Замена на BitMap (только при перетаскивании, так как необходимо оставить возможность удаления шейпов по одному) 2) Удаление из списка отображения тех шейпов что вышли за пределы экрана. 3) Замена объектов собственным классом без "лишних" листенеров. Поделитесь мыслями как в моей ситуации на ваш взгляд поступить лучше (как сделали бы вы) . возможно ли просто отписать шейпы от неиспользуемых событий? (Этот вопрос отвалился :) ->mouseChildren,mouseEnabled ) - изменяем на false для контейнера с шейпами. P.S. Прошу прощения что немного сумбурно, если что - могу конкретизировать и/или привести фрагменты кода. Заранее всем спасибо. |
Был проведен эксперимент:
на рабочую область 900х900 создаем битмап затем на каждый кадр: в 10.000-ом цикле ставим цветной пиксель. после цикла прописовываем битмап. таким образом получаем шум. довольно шустрый, надо сказать шум. теперь перед прорисовкой битмапа вставляем строчку - создание нового шейпа. просто создание пустого шейпа, только и всего и смотрим как изменилась скорость прорисовки. |
Да mouseEnabled по умолчанию это зло.
|
кстати делали карту города
http:/karta.kirov.ru там я отрисовывал каждый раз кусочки карты. и двигал ее.. так вот когда отрисовываем по матрице с большим масштабом все равно работает не так быстно как хотелось бы... то есть что бы отрисовать битмапу с большим масштабом требуется заметное количество времени :( может быть кто то решил трабл... в частности такой: Есть обхект который необходимо перетаскивать... влево вправо... ну и все такое, так вот: когда масштаб меньше 10 то работает все замечательно в какой то момент масштабирования начинаются тормоза :( кто нить сталкивался с проблеммой ? как решить ? на счет отрисовки куска карты не вариант, я уже так делал все равно тормозит (хотя может быть не так сильно однако может быть есть решение которое ваще проблемму решит ?) http://flyagaric.hop.ru |
| Часовой пояс GMT +4, время: 09:57. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.