Производительность AS3 с масштабированным растровым изображением (или заливкой формы)

Насколько дорого обходится отрисовка масштабированных BitmapData?

Как и во многих других играх, в моей игре есть фоновое изображение, охватывающее всю рабочую область.

Это изображение масштабируется в соответствии с размерами рабочей области (размер можно изменять, хотя и очень редко).

Это изображение также отображается в каждом кадре (поскольку оно пересекается с каждой грязной областью)

Итак, на каждом кадре Flash должен рисовать масштабированное растровое изображение - насколько это дорого?


person Eyal Katz    schedule 30.11.2013    source источник


Ответы (1)


«Это изображение также отображается в каждом кадре» - вы имеете в виду, что изображение находится на сцене, а другие DisplayObjects перемещаются по нему, или что содержимое изображения перерисовывается каждый кадр?

На этот вопрос непросто ответить, и он действительно сводится к вашему варианту использования. Некоторые моменты:

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

Если это статичное изображение, вам не о чем беспокоиться. Большую часть времени рендеринга во флэш-памяти занимает преобразование вектора в растр - изображения не имеют этого, поэтому в основном это просто копирование байтов в буфер дисплея. Если вы действительно хотите углубиться в подробности, используйте Scout (http://gaming.adobe.com/technologies/scout/), которые, среди прочего, предоставят вам довольно хорошую информацию о времени рендеринга.

person divillysausages    schedule 30.11.2013
comment
Изображение представляет собой статическое растровое изображение Full HD (изначально файл PNG) --- Оно охватывает всю сцену для поддержки полноэкранного режима (поэтому рисуется каждый кадр - все пересекает его) --- Размер сцены можно изменять (поэтому я нужно большое растровое изображение; уменьшение его при каждом изменении размера возможно, но немного утомительно) --- Так что действительно, на каждом кадре Flash должен рисовать масштабированную версию растрового изображения ... и мне интересно, насколько это дорого ... . дело только в побайтовом копировании? как насчет сглаживания? разве не работает целый алгоритм для уменьшения масштаба изображения? 10х за помощь! - person Eyal Katz; 01.12.2013
comment
уменьшение его при каждом изменении размера возможно, но немного утомительно - изменение размера не происходит в каждом кадре (если вы не можете перетащить его для изменения размера), поэтому, вероятно, стоит перерисовать растровое изображение, если это поможет вашей производительности на других кадрах. По умолчанию сглаживание false, но если оно у вас активно, то да, оно будет иметь влияние. Чтобы узнать, действительно ли это проблема для вашей игры, воспользуйтесь разведкой, если можете. - person divillysausages; 01.12.2013
comment
он прорисовывается каждый кадр - все пересекает его - я думаю, вы путаете перерисовку растрового изображения с областями перерисовки. Я не специалист по внутреннему устройству флэш-рендеринга, но это примерно так - для отображения ваша графика должна быть растеризована. От вектор до растрового изображения требуется большая часть времени на рендеринг. Растровые изображения не нужно растрировать в том виде, в каком они уже есть (в данном случае не учитываются вращение и масштаб). Чтобы увеличить скорость, вспышка только перерисовывает грязные области экрана - на самом деле не имеет значения, находится ли ваше огромное изображение или другое в bg. - person divillysausages; 01.12.2013
comment
если вы тестируете и видите проблему, сначала попробуйте перерисовать его до нужного размера, затем попробуйте разбить его на более мелкие изображения, затем попробуйте скворец (если вы его еще не используете) . по большей части, я не думаю, что у вас возникнет проблема, если нет чего-то особенного для вашей игры, и даже тогда вы, вероятно, получите больше преимуществ от оптимизации другой графики, чем ваш bg - person divillysausages; 01.12.2013
comment
для информации, у нас была iso-игра, работающая в скворечнике, с огромным изображением bg (около 6 полных таблиц спрайтов) и несколькими сотнями анимационных юнитов, идущих по нему со скоростью 60 кадров в секунду. Даже тогда самые большие проблемы с производительностью были такими, как сортировка - person divillysausages; 01.12.2013
comment
Когда DisplayObject изменяется (перемещается / масштабируется / цвет / фильтры и т. Д.), Он запускает грязную область ... Flash объединяет все эти области в кадре максимум в 3 унифицированных грязных области и обновляет свой матричный буфер пикселей в соответствии с этими областями. - Обновление грязной области включает рисование ВСЕХ объектов DisplayObject в этой области (даже тех, которые не изменились, имеют альфа = 0 или находятся за другими объектами) ... - person Eyal Katz; 07.12.2013
comment
... так что неважно, что меняется на экране - даже одно изменение пикселя - мое изображение BG прорисовывается (оно лежит за этим изменяющимся пикселем, поскольку оно охватывает всю сцену) - и я все еще задаюсь вопросом, насколько дорого обходится масштабирование этого изображения ... Я воспользуюсь вашим советом и поищу его - новости будут позже .. - person Eyal Katz; 07.12.2013