Вы не будете получать события таймера быстрее чем один раз за кадр, период. Вы действительно можете рассчитывать время, прошедшее через getTimer()
, используя захват затем сравнить технику с помощью ввода кадров слушателя, как это:
var oldTime:int;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onEnterFrame(e:Event):void {
var frameTime:int=getTimer()-oldTime;
oldTime=getTimer();
// process frameTime
}
Имейте в виду, однако, это один поведение, который ненавидят в играх, то есть, если флэш-плеер будет отставание по какой-то причине, разница в getTimer()
будет зависеть от того, что ваш игровой движок будет вести себя как много времени без каких-либо действий со стороны игрока, и в таких играх игрок должен реагировать в реальном времени, таким образом, игровой движок будет вероятно, реагируют на игру по ситуации в рамках одного кадра. Обходной путь заключается в том, чтобы ограничить временную разницу кадров с разумным значением, которое соответствует приличной частоте кадров, ниже которой вы не ожидаете, что ваша игра будет запущена в любых обстоятельствах (скажем, 10 кадров в секунду, 1000/10 = 100).
static const FRAME_CAP:int=100;
if (frameTime>FRAME_CAP) frameTime=FRAME_CAP;
PS: Я ожидаю, что истинная причина таймеров привязываясь к кадру скорости является то, что проверка таймера рутина теперь вызывается внутренне вместе с созданием ввести кадр или выход кадров события, которые затем распространяются через список всего дисплея , а фактическое время обновления для таймеров затем вычисляется точно через getTimer()
, которые затем сравниваются с внутренним полем «следующего огня» таймеров, чтобы выполнить соответствующие события TIMER_TICK
и обновить их с помощью getTimer()+delay
.
большое, простое решение. Я действительно думаю, что Adobe должна изменить свои методы на frameRate ... – Cilan
Я только что понял что-то действительно замечательное, что заставляет меня чувствовать себя глупо: 'setInterval' – Cilan