Руководство по actionscript. часть 4, стр. 153
Подобные задержки могут приводить к непредсказуемым эффектам в анимации. Чтобы гарантировать, что некоторый объект пройдет указанную дистанцию за определенный промежуток времени, мы должны устанавливать позицию этого объекта в соответствии с его скоростью (то есть в соответствии с его ускорением в определенном направлении). В листинге 24.10 продемонстрирована базовая методика.
Листинг 24.10. Вычисление позиции с учетом скорости
package { import flash. display.*; import flash. events.*; import flash. utils.*;
// Перемещает объект на указанное количество пикселов в секунду, // независимо от скорости кадров public class Animation-extends Sprite { private var distancePerSecond:int = 50; // Количество пикселов,
public function Animation ( ) { // Создаем объект для анимации circle = new Shape( ); circle. graphics. beginFi11(OxOOOOFF, 1); circle. graphics. lineStyle(l): circle. graphics. drawEl1ipse(0, 0, 25, 25); addChild(circle);
// Инициализируем значения времени then = getTimer( ); now = then;
// Регистрируем приемник для получения уведомлений о проверках
//• запланированных обновлений экрана
addEventLi stener(Event. ENTER_FRAME, enterFrameLi stener);
}
// Обрабатываем события Event. ENTER_FRAME
private function enterFrameListener (e:Event):void {
// Вычисляем, сколько времени прошло с момента последнего перемещения
then = now;
now = getTimer( ):
var elapsed:int = now — then;
var numSeconds;Number = elapsed / 1000;
// Определяем количество пикселов, на которое должен переместиться // объект, учитывая промежуток времени, прошедший с момента // последнего перемещения
var moveAmount:Number = distancePerSecond * numSeconds;
// Перемещаем объект. В данном случае объект перемещается // под углом 0 градусов.