Разница в производительности между рисованием простой фигуры или сложного мувиклипа в растровых данных

Я работаю с другим разработчиком над приложением. Его часть — это в основном панель управления, разработанная как автономный модуль, и ее нужно интегрировать в мое основное приложение.

Мое приложение должно перерисовать все панели и элементы в bitmapData, чтобы выполнить некоторый элемент управления bitmapData.hitTest (мы работаем с мультитач-таблицей, панели можно перетаскивать, но следует избегать перекрытия).

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

Это нормально? Я думал, что процесс отрисовки экранного объекта внутри bitmapData с точки зрения производительности был связан с размерностью клипа, а не с его содержимым.

РЕДАКТИРОВАТЬ: я уже исправил это обходным путем (в основном рисуя что-то вроде ограничивающей рамки объекта панели), но мне все еще любопытно :)


person Sr.Richie    schedule 19.03.2012    source источник
comment
Какой метод BitmapData вы используете? Присутствует ли прозрачность?   -  person Amy Blankenship    schedule 19.03.2012
comment
Я использую bitmapData.hitTest. Панель, которая вызывает у меня проблемы, не имеет прозрачности   -  person Sr.Richie    schedule 20.03.2012
comment
Нет, я спрашивал, какой метод вы использовали для рисования пикселей. Например, copyPixels намного быстрее, чем отрисовка.   -  person Amy Blankenship    schedule 20.03.2012


Ответы (1)


Производительность будет частично определяться содержимым объекта отображения. В зависимости от количества и сложности рисуемых детей это может значительно различаться. Возьмем, к примеру, что вы потенциально можете нарисовать 10 000 (произвольно большое количество) спрайтов размером 1 пиксель на 1 пиксель (произвольно малое число), расположенных друг над другом. Каждый спрайт может содержать в своем коде рисования множество произвольных векторных команд (moveTo, lineTo и т. д.) для рисования, даже за пределами видимой области, эти команды рисования будут выполняться независимо от области рисования при вызове методов рисования (если не указано иное). код предотвращает их вызов для конкретных ограничений). Я не думаю, что вы должны увидеть существенную разницу в рисовании объектов отображения в объекте BitmapData по сравнению с рисованием их на экране (единственное различие, о котором я могу думать здесь, это запись в ОЗУ/кучу, тогда как с ускорением графического процессора это может быть внутренне вместо этого используйте видеопамять).

Я считаю, что на сам hitTest не повлияет количество детей, поскольку в этот момент вы просто смотрите на пиксели в A и пиксели в B, поэтому, как вы говорите, он должен зависеть только от площади пикселей в A и B .

Из любопытства, какую сенсорную поверхность вы используете и на какой платформе она работает (Android?). Я полагаю, что с хорошим процессором, таким как Tegra 2 или 3 (или с каким-либо другим многоядерным и/или GPU-ускоренным набором микросхем), это не окажет такого заметного влияния на производительность (хотя я могу ошибаться). ). Я немного работал над игрой-стрелялкой сверху вниз и недавно переключился с использования упрощенного метода проверки попаданий, который я написал с использованием ограничительных рамок, на использование метода проверки попадания BitmapData, тестируя его локально, похоже, это не влияет отрицательно на производительность, но У меня пока нет кабеля, чтобы протестировать его на устройстве, поэтому я не уверен, повлияет ли это на производительность при запуске на устройстве.

person shaunhusain    schedule 19.03.2012
comment
спасибо, я не был уверен в этом. Проблема не в hitTest, а в том, что каждый раз, когда объект в таблице перемещается, bitmapData, содержащий все другие объекты в таблице, перерисовывается для выполнения вычисления hitTest. Вероятно, эта постоянная перерисовка сложного объекта вызывает падение производительности. А по поводу вашего вопроса, я работаю не на мобильной платформе, а на кастомном мультитач столе :) - person Sr.Richie; 20.03.2012
comment
@Sr.Richie Круто! Некоторое время назад я построил его на основе FTIR (методика Джеффа Хана), используя основное видение сообщества, но слишком увяз в работе над проектом, чтобы продолжать работу над ним. Это определенно захватывающие вещи, удачи. - person shaunhusain; 20.03.2012