Flash Player воспроизводит анимацию слишком медленно - есть ли способ ускорить ее? - PullRequest
1 голос
/ 13 мая 2011

Я делаю проект (во Flash CS5) - я визуализирую музыку с помощью файла midi - это означает, что у меня на сцене много простых видеоклипов (прямоугольников), и они имеют разные z-index, opacity, height, width, blurи т.д ...

Дело в том, что он работает слишком медленно!Я вижу, что частота кадров меняется от 30 F / S до 10 или даже 5 F / S, когда вспышке трудно ее воспроизвести.теперь мои анимации не слишком сложны - я видел в Интернете или в играх удивительные вещи - я только пытаюсь перемещать простые фигуры.

Так как я не знаю, что делать - мои вопросы, если естьесть способ:

  1. каким-либо образом использовать компьютерную графику? Используя движок openGL?У меня есть мысль, что, если бы я подключил его к мощному двигателю, он бы работал?

  2. Есть ли способ записать его кадр за кадром? Iмне не нужно видеть его в реальном времени (хотя это было бы неплохо) - я могу пойти на компромисс в создании файла .mov.но я обнаружил, что экспорт в виде фильма не поможет (он записывает его так, как будто он воспроизводится в реальном времени).Я попробовал способы «вручную» замедлить скорость каждого мувиклипа - но поскольку все замедляется ... теперь на экране появляется больше мувиклипов для рендеринга, и он становится еще медленнее.

Можеткто-нибудь думает о решении?Я делаю что-то неправильно?(Я действительно не думаю, что я делаю что-то настолько сложное, чтобы это было слишком медленным)

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Вы можете использовать аппаратное ускорение через флаг для вашего флэш-плагина: http://www.adobe.com/devnet/flashplayer/articles/fplayer10_1_hardware_acceleration.html Тем не менее, он работает не на всех платформах, а только для Windows :( Кроме того, улучшение производительности, которое вы получите, если таковое имеется, сильно зависит от того, из чего состоит ваша анимация.

Запись материала кадр за кадром возможна, но раздражает. Вы можете использовать классы PNGEncoder или JPEGEncoder и записывать их в файлы. http://blog.everythingflex.com/2008/10/01/filereferencesave-in-flash-player-10/ Если вы поместите это в обработчик для onEnterFrame, он будет каждый раз сохранять кадр на жесткий диск. Затем вы можете создать фильм из ваших изображений, используя стандартные инструменты, такие как mencoder.

Теперь мой совет: попробуйте профилировать ваш SWF и выясните, что же такого медленного. Есть шанс, что это не рендеринг, а твой код. Если это действительно рендеринг, попытайтесь выяснить, почему он такой медленный - как будто вы копируете тысячи видеороликов с альфа-поддержкой, которые вы меняете в каждом кадре. Флэш-плеер довольно умен в том, что он может кэшировать и все такое, но вы должны дать ему шанс. Если ваша сцена не сложная и все еще медленная, это всегда означает, что вы делаете что-то не так. Экспериментируйте без альфы и с методами рисования, а не с сотнями видеоклипов.

1 голос
/ 13 мая 2011

Вы упомянули размытие . Это значительно замедлит вашу анимацию. Почти любой фильтр не рекомендуется для объектов, которые нужно анимировать - по крайней мере, не много одновременно. Если вы собираетесь сделать это, то, по крайней мере, примените BlurFilter к контейнеру, а не к отдельным дочерним элементам.

Существуют и другие, значительно более эффективные способы применения фильтров ко многим объектам, такие как рисование элементов на BitmapData и применение фильтра к ним с использованием BitmapData.applyFilter()

Удалите все ваши фильтры и посмотрите, поможет ли это. Если нет, предоставьте еще немного кода / информации, и я посмотрю на него:)

...