Всегда ли AS3 Event.ENTER_FRAME работает на каждом кадре? Даже на медленных компьютерах? - PullRequest
4 голосов
/ 06 июля 2011

У меня есть скрипт, который использует событие ENTER_FRAME для запуска каждый раз.Я заметил, что на некоторых более медленных компьютерах может быть некоторая задержка при воспроизведении флэш-фильма.

Работает ли ENTER_FRAME на каждом кадре, даже если на медленном компьютере?Если флэш-ролик запаздывает, продолжает ли происходить событие ENTER_FRAME, а рендеринг просто пытается наверстать упущенное?

Является ли выполнение кода на ENTER_FRAME надежным способом выполнения кода при каждом вводе кадра?1009 *

Ответы [ 4 ]

6 голосов
/ 06 июля 2011

Да.Каждый кадр, без исключений.Если что-то замедляет воспроизведение фильма (тяжелые сценарии или тяжелая графика), обработчики Event.ENTER_FRAME все еще выполняются до рендеринга кадра.

Следовательно, как правило, рекомендуется использовать Timerэкземпляр с TimerEvent.TIMER, даже если его задержка установлена ​​равной «идеальной» длительности кадра для кадров в секунду вашего фильма.Поскольку обработчик timer не должен запускаться с точно одинаковой скоростью.

Более подробное объяснение см. По следующей ссылке: Elastic Racetrack

1 голос
/ 31 августа 2011

Общий ответ на общий вопрос.

Если вы хотите улучшить производительность Flash Player, учтите следующие моменты:

  1. Не используйте штрихи, если это не требуется. (Штрихи больше процессора
    интенсивный)

  2. Используйте по возможности меньше градиентных цветов.

  3. Используйте оптимизированные растровые изображения, если таковые имеются.

  4. Эффективно используйте addChild(yourObject), addChildAt(yourObject, index), removeChild(yourObject), removeChildAt(index).

  5. Слушайте Event.ADDED_TO_STAGE и Event.REMOVED_FROM_STAGE соответственно.

  6. Слушайте addEventListener(somelistener, somefunction);
    removeEventListener (somelistener, somefunction);

  7. Слушайте Event.ACTIVATE и Event.DEACTIVATE.

  8. Если объекты загружаются извне, обязательно используйте
    unloadAndStop() чтобы полностью удалить ненужные objects от сцена.

1 голос
/ 07 июля 2011

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

на заметку, помните, что ... Использование многих обработчиков событий также может создавать проблемы с производительностью (если их слишком много) Каждый раз, когда он вызывается, flash должен как минимум создать объект события. Это означает, что у вас есть память, которая должна быть выделена каждый раз, когда происходит событие. Затем эта память должна быть собрана сборщиком мусора позднее, и сборщик мусора также будет использовать ресурсы для выполнения.

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

0 голосов
/ 19 января 2013

Проверьте это для тех, кто ищет решение, не зависящее от частоты кадров ... Этот парень действительно умен и имеет метод, позволяющий одновременно анимировать на разных частотах (более медленные устройства, настольные ПК и т. Д.) И сохранять частоту кадров вашего объекта независимо от частоты кадров вашей временной шкалы. , Проверьте это здесь . Советы 4 и 5. Надеюсь, это поможет!

Я обнаружил, что класс таймера на самом деле очень непоследователен при нажатии кнопок, иногда таймеру просто не удается завершить цикл, и событие TIMER.COMPLETE никогда не достигается, если бы у меня было 5 циклов по 100 мс, он просто остановился бы после 3 циклы ... Кроме того, частота кадров будет срабатывать каждый кадр, но это не соответствует !!! Если у вас запаздывает загрузка процессора, частота кадров будет снижаться, и, следовательно, вы не будете обновлять ничего через регулярные промежутки времени, а скорее независимо от текущей частоты кадров. Посмотрите эту ссылку, есть даже некоторый код частоты кадров, который вы можете использовать в своих проектах, чтобы проверить его.

...