2011-01-08 2 views
1

Я разрабатываю игру с использованием Flex и использую класс Timer для продолжения основного цикла.Проблемы с событием Enterframe

Однако, когда я попытался использовать событие enterFrame для выполнения основного цикла, возникло несколько проблем.

Прежде всего, физическое моделирование показалось слишком быстрым. Является ли событие enterFrame более одного раза в кадре? Я установил глобальную частоту кадров приложения на 24, так что не должно ли приложение запускать событие каждые 1/24 секунды?

И вторая проблема заключается в том, что когда игра выполняется так, некоторые добавленные компоненты MXML не отображаются. Я понятия не имею, почему это происходит.

Помогите мне пожалуйста?!?

Спасибо.

+0

Некоторые кадры занять больше времени, чтобы сделать, чем другие. Установка FPS на 24 означает, что новый кадр будет отображаться * примерно * 24 раза в секунду, но не точно. Событие ввода-кадра транслируется только один раз для каждого кадра, однако возможно, что вы подключили к нему один и тот же прослушиватель событий несколько раз (в результате эта функция вызывается несколько раз за кадр). Каков был ваш интервал таймера? Кроме того, мы не можем помочь с отсутствующими компонентами, если мы не увидим какой-то код (часть, в которую они добавлены, станет хорошим началом) – Cameron

+0

Вы используете Box2D для своей физики? – Zevan

+0

Да, Box2DFlash для физики – user434565

ответ

2

Не рассчитывайте, чтобы частота кадров была четной, или что enterframe вызывается с фиксированным интервалом. Даже таймер-класс не на 100% точнее.

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

Эта статья объясняет все это прекрасно: http://gafferongames.com/game-physics/fix-your-timestep/

1

Частота кадров - желаемое значение. Если пользователь запускает его на медленной машине, вы можете столкнуться с их медленными результатами. Как насчет возврата к добрым старым setInterval?

+0

+1, вы правы относительно частоты кадров. Однако 'setInterval' не будет делать медленную машину быстрее. –

Смежные вопросы