Рендеринг Flash: советы и рекомендации по оптимизации

Я собираюсь скоро выпустить веб-сайт, так что я добрался до последних этапов. Пора оптимизировать малышку! В целом веб-сайт работает довольно хорошо, средняя частота кадров составляет 32 кадра в секунду. Но на некоторых тяжелых участках анимации он любит понижать пару кадров примерно до 22 кадров в секунду. Что не так уж и ужасно. Но я настраиваю его, насколько это возможно, чтобы он работал на максимально возможной скорости.

Возможно, я пропустил несколько советов и уловок, которые сделают этот ребенок еще более плавным.

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

Последовательность анимации:

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

Делайте анимированные объекты как можно меньше:

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

cacheAsBitmap = true:

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

Уничтожьте все, чем вы не пользуетесь:

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


person Kasper    schedule 30.09.2008    source источник


Ответы (9)


Еще одно соображение - какой движок анимации вы используете. Если вы используете тот, который поставляется с Flash, вы, вероятно, получите некоторую производительность, переключившись на что-то вроде TweenLite (есть еще несколько хороших).

Имейте в виду, что cacheAsBitmap может быть очень опасным. Если вы масштабируете, вращаете или обновляете сам клип (например, изменяете альфа-канал чего-то внутри него), флэш-память должна будет создать новый снимок, который все замедлит. Пока вы перемещаете зажимы по осям x и y, хорошо, чтобы они всегда были включены (если вам нужно повернуть, выключите его, а затем снова включите, когда закончите). Также обратите внимание, что если вы используете фильтры, cacheAsBitmap всегда автоматически включен -> может работать медленно.

person Antti    schedule 01.10.2008

Будьте проще,

Flash отображает графику как вектор (и очень хорошо). Чем сложнее объект, тем больше времени потребуется на рендеринг.

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

Решение состоит в том, чтобы визуализировать один раз в одном объекте, например в обработчике отображения. Вы можете потерять свою «объектность», но восполните ее за счет более быстрого рендеринга. Помните об этом при создании плиток или множества небольших «дополнений» к спрайту.

person Community    schedule 01.10.2008

Альфа-прозрачность может быть сложной для рендеринга ...

Из того, что я слышал, фильтр свечения нанесет серьезный ущерб, если вы его оживите.

По возможности используйте visible = false вместо alpha = 0.

person onekidney    schedule 30.09.2008

Используйте cacheAsBitmap = true: только в том случае, если вы не анимируете преобразование Sprite / MovieClip (например, масштабирование / вращение и т. Д.), Иначе это действительно замедлит его.

По возможности используйте PNG вместо векторных фигур.

person Iain    schedule 30.09.2008

Возможно, вы захотите использовать свойство scrollRect для мувиклипов / спрайтов и т. Д. В основном оно действует как маска, но с бонусом, заключающимся в том, что вы можете прокручивать замаскированный клип с некоторым смещением.

person Community    schedule 02.10.2008

Большие фрагменты текста, если они не изменяются, часто можно заменить растровым изображением (или прозрачным PNG). Из-за этого содержание контента сложно поддерживать, но это может значительно повлиять на производительность. (Примечание: это в основном относится к встроенным шрифтам, особенно изогнутым, таким как азиатские шрифты, поскольку такие шрифты отображаются в виде векторных фигур. Шрифты устройств обрабатываются ОС и несут гораздо меньше накладных расходов.)

person fenomas    schedule 03.10.2008

Профиль, профиль, профиль.

Если скрипты работают медленно, начните отслеживать отчеты о времени, чтобы выяснить, какой класс, какая функция, какой цикл, какой оператор замедляет вас. Если графические эффекты замедляют вас, проследите подробные отчеты о времени FPS и начните настройку. Ускоряется ли при удалении того или иного слоя? Или когда вы измените этот клип, чтобы он не был прозрачным? И так далее. Изолируйте то, что медленно, прежде чем пытаться это исправить.

Простое копание и рефакторинг редко дает реальное улучшение производительности.

person fenomas    schedule 03.10.2008

Кэширование растровых изображений дает реальную отдачу только тогда, когда кэшируемый DisplayObject имеет сложные внутренние части, но имеет тенденцию оставаться там без изменений - например, раскрывающееся меню, которое внутренне содержит все виды элементов с изменяемым оформлением, но его нужно повторно отображать только тогда, когда он открыт или закрыт. Будьте осторожны, не включайте кеширование только потому, что объекты большие.

person fenomas    schedule 03.10.2008

Flash (8 - ActionScript 2 или ниже) будет отображать клип, даже если для его видимости установлено значение false - чтобы остановить его рендеринг, вам нужно переместить его с «видимого» экрана (т.е. x = -2000, при условии, что ширина клипа равна менее 2000).

person Max Stewart    schedule 30.09.2008
comment
Интересно ... черт возьми, это похоже на взлом, есть ли другой способ заставить Flash Player что-то не отображать? - person onekidney; 01.10.2008
comment
да, это довольно мерзко - person Kasper; 01.10.2008
comment
Это совсем не мой опыт, я знаю, что установка альфа на ноль приведет к продолжению рендеринга клипа, но я всегда работал с предположением, что visible = false отключает рендеринг для этого клипа. - person grapefrukt; 01.10.2008
comment
Это взлом, и он требуется только для ActionScript 2 или ниже - обновите ответ соответственно. - person Max Stewart; 04.10.2008