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

Код:
mainTimer = new Timer(tick=10);
mainTimer.addEventListener("timer", doGameTimer);
mainTimer.start();
gameStartTime = getTimer();
function doGameTimer (e:Event) {
// двигаем что нам надо:
ball.x += ball.vx;
ball.y += ball.vy;
// компенсируем следующий "тик":
var t = Math.max(1, tick-((getTimer()-gameStartTime)-mainTimer.currentCount*tick));
mainTimer.delay = t;
if (t>1) {
// если игра не тормозит, сразу же обновляем экран:
e.updateAfterEvent();
}
}
И хотя при этом подходе "тики" плавают в пределах от 1 до 10, на вид объект движется очень равномерно и без мигания (даже не надо учитывать величину предыдущего "тика" при изменении координат, т.к. это величина будет "плавать" только в периодах больше 1/100 секунды - на глаз всё равно не видно).
Кстати, tick=10 - это где-то оптимальная величина, если больше - уже заметно мерцание, меньше - мало запаса для компенсации следующего вызова, и большие накладные расходы на обслуживание самого вызова таймера.
И вот уже от этой величины времени стоит рассчитывать вектор скорости (vx, vy). А не от единицы скорости искать время перерисовки... Шарик арканоида - это где-то в районе v=0.2 у меня получилась

Но и при v=10 движение хоть и быстрое, но вполне естественное, без рывков.

А вот от EnterFrame, john, пришлось отказаться, т.к. при загрузке процессора, близкой к 100%, флэш начинает сам компенсировать временные промежутки, т.е. он делает, допустим 10 вызвовов enterFrame по 5 миллисекунд (т.е. быстрее, чем реально может перерисовывать сложную сцену, только код исполняется), потом у него идёт один временной вызов на 60мс (перерисовал!), и эти вызовы перерисовки идут очень неравномерно, компенсировать рывки не получается... Способ выше начинает лагать только при гораздо большей загрузке.
Рекомендую.
