Flash: как выйти из тупика из-за простоя? - PullRequest
1 голос
/ 13 марта 2011

У меня есть программа Flash 10, которая блокируется при работе на устройстве, таком как нетбук, со слабым процессором. В частности, он переходит в состояние, в котором он выполняет очень тяжелую обработку в обработчике события ENTER_FRAME после события мыши, и ожидает прекращения этой обработки после события мыши вверх. Проблема заключается в том, что, поскольку после обработчиков событий фрейма не осталось времени простоя, событие «мыши» никогда не принимается, и, следовательно, процесс блокируется, что составляет бесконечный цикл. Да, я могу сделать такие вещи, как понизить частоту кадров и сделать все возможное, чтобы уменьшить обработку, происходящую в каждом кадре, но есть ли какой-нибудь железный способ выйти из этого? Есть ли какой-нибудь способ обнаружить, что простоя не существует? Или есть способ заставить получать события интерактивной мыши? Или я мог бы в коде ENTER_FRAME определять состояние мыши, вверх или вниз, без получения события мыши?

Ответы [ 2 ]

1 голос
/ 13 марта 2011

К сожалению, во Flash нет потоков и «настоящей» многозадачности.

Но попробуйте Alexeui PseudoThread реализацию.Это помогает разделить операции с интенсивным использованием ЦП на более мелкие части, которые выполняются «между» обновлениями фрейма.

0 голосов
/ 13 марта 2011

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

Вы должны обновить свой алгоритм, чтобы разбить его обработку на более мелкие, повторяющиеся фрагменты.MOUSE_DOWN должен установить флаг, который заставляет этот алгоритм обрабатывать несколько блоков каждый ENTER_FRAME, пока MOUSE_UP не очистит флаг.В идеале ваш алгоритм должен отслеживать количество кадров в секунду и корректировать объем работы, выполняемой им на кадр, чтобы поддерживать FPS на приемлемом уровне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...