Я наткнулся на эту тему сегодня, исследуя что-то очень странное. Выполнение определенных действий в нашем приложении Flex может привести к тому, что количество кадров, отображаемых в ракете, может составлять от 12 кадр / с до ~ 30 кадр / с: загруженные анимации начинают воспроизводиться с высокой скоростью, а графический интерфейс начинает блокироваться.
Поскольку все, что я читал на Flex / Flash, говорит о том, что «частота кадров ограничена частотой кадров, установленной в приложении верхнего уровня», кажется, что эти дополнительные рендеры могут происходить только из-за некоторых событий. вызывая их (никаких программных изменений частоты кадров на сцене не делается). Поскольку это происходит только тогда, когда я помещаю свою логику обновления в обработчик ENTER_FRAME, я пытаюсь выяснить, что может происходить, что, по-видимому, приводит к тому, что Flex сходит с ума.
Гипотеза: что-то в моей функции обновления вызывает немедленное обновление экрана, это немедленно вызывает другое ENTER_FRAME, что означает, что мой цикл обновления вызывается, что вызывает другое немедленное обновление экрана, ...
В нашем графическом интерфейсе используются компоненты Flex, если это имеет значение. Я действительно не знаю, куда идти дальше.
Разъяснения
- Когда я говорю, что вещи ускоряются, там
это проявляется двумя способами.
- Во-первых, мой обработчик ENTER_FRAME получает
звонил гораздо чаще.
- Во-вторых,
загружен Flash SWF с циклом
анимация встроена в неожиданные скорости
до настоящего момента это выглядит глупо.
- Я не использую updateAfterEvent, я только
обнаружил, что это существовало при исследовании
Эта проблема. Видимо, некоторые
события на подклассах Sprite
автоматически позвоню, и мне интересно
если это коренная причина.
- Я не делаю никаких прямых сообщений о рендеринге вообще. Фоновые анимации воспроизводятся автоматически, поскольку они имеют встроенные временные шкалы из авторизации CS3. Все, что делает наша функция обновления, это изменяет положение DisPlayObjects или добавляет / удаляет их и т. Д.
Обновление:
Я добавил ярлык в свое приложение для распечатки stage.frameRate и обнаружил, что в определенные моменты он внезапно меняется с 12 на 1000 (максимально допустимое значение). Хотя добавление строки в мой обработчик ENTER_FRAME для сброса было тривиально, это вряд ли поможет.
Кроме того, даже делая это, рендеринг все испортил. Определенные действия (такие как создание всплывающего окна Alert) возвращают его к жизни.
К сожалению, я не могу просмотреть источник класса Stage, чтобы установить точку останова для свойства setter.
Это очень интересно насчет загрузки Flex, установленной на 1000 кадров в секунду. У нас есть несколько приложений Flex, которые предоставляют общий интерфейс. Главное приложение отвечает за загрузку этих модулей в соответствии с требованиями класса SWFLoader. Однако процесс загрузки уже учитывает задержку загрузки ... при загрузке SWF-файла мы ждем APPLICATION_COMPLETE из SystemManager. Раз это получено, разве не должно быть выполнено завершение заявки?