Что происходит, когда приложение Flex не может работать с указанной частотой кадров? - PullRequest
2 голосов
/ 24 сентября 2008

В нашем приложении (игре) в некоторых случаях оно не может работать достаточно быстро. Очевидно, что мы хотели бы ускорить его, но в то же время, когда это происходит, это вызывает много проблем (или, если это не вызывает их, оба связаны). Единственное, что меньше всего связано с нашей собственной функциональностью, это то, что встроенный метод Alert.show () перестает работать. Обычно появляется полноэкранное прозрачное поле, но не фактическое всплывающее окно. Я полагаю, что это связано с тем, что Flex предоставляет все доступные циклы для других задач ... но его сложно исследовать аналитически, поэтому я рад услышать другое объяснение.

Для пояснения, основные части Flex просто не работают в этой ситуации. Я прошел через код, например, где новый элемент добавляется на экран, все происходит, и метод addChild () вызывается на главном холсте дисплея ... но тогда элемент не появляется. Если мы затем отключим наш цикл обновления, элемент внезапно появится.

Так что, если предполагается, что Flex запускает точно такой же код или нет, то каким-то образом он блокируется - это странный способ. Как я уже сказал, даже метод Flex Alert.show () не работает.

Ответы [ 3 ]

4 голосов
/ 25 сентября 2008

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

Когда Flash не может идти в ногу с указанной частотой кадров, все, что происходит, это то, что вместо ожидания между обновлениями кадров, Flash делает их так быстро, как может, без ожидания между ними. Таким образом, единственное видимое отличие состоит в том, что обновления кадров происходят реже. Не бывает случаев пропустить код, пропустить события или перерисовать экран по соображениям производительности (если только вы не нашли новых ошибок).

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

0 голосов
/ 24 сентября 2008

Мне нравится делать игры в FLEX 3 (actionscript3), это довольно удобное решение по сравнению с Flash CS3: хорошая среда отладки без хлопот. Конечно, от игрового стиля зависит, какой из них лучше, если вам нужно много графики, вам может понравиться Flash больше, но Flex позволяет использовать внешние изображения, компоненты и т. Д. Обратите внимание, я не говорю о проекте Flex XML здесь.

Ответ на вопрос о производительности: Вы можете использовать, например, старая машина MacOSX, чтобы увидеть, что происходит на очень медленной машине, есть несколько решений: - перемещать объекты более чем на x ++ y ++ пикселей, когда машина старая - уменьшить объекты

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

0 голосов
/ 24 сентября 2008

Я не слишком уверен, что у Flex есть какая-то дополнительная обработка производительности. Но для чистого ActionScript единственное, что может произойти, - это замедление до скорости сканирования, все будет происходить обычно медленнее. Если вы сложите очень большое количество прозрачных или замаскированных объектов, вы можете получить странное поведение, но это должно быть более заметным.

И я полагаю, что говорить о том, что создание игры во Flex не слишком хорошая идея (только из-за снижения производительности, которое имеет фреймворк), немного запоздало;)

...