Измерение скорости объекта Tween
Я обработал объект (его свойство x) с помощью tweenlite, и я хочу измерить мгновенную скорость во время анимации в данный момент.
Я знаю, что могу создать массив, который будет постоянно записывать последние значения x в onUpdate, а затем принимать разницу. Но есть ли более эффективные способы сделать это?
2 ответа
Не понимаю, зачем вам скорость, но это просто математика. Вы уже знаете расстояние, которое объект пройдет, и время, необходимое для прибытия в пункт назначения. Так,
speedTimeUnit = distanceTraveled/timeNeededToArrive;
или если вам нужно знать скорость в кадрах
speedFramesUnit = distanceTraveled/(timeNeededToArrive*frameRate);
Конечно, это в случае, если время в секундах...
Нет, другого способа измерить нет.
В любом случае вам нужно знать расстояние между двумя точками и время перемещения, и если у вас есть анимация на временной шкале, единственный способ узнать эти параметры - это измерить ее. Если ваша анимация линейная, вы можете сохранить начальную позицию и метку времени, и в любой момент мгновенная скорость будет:
var origPos:Point = new Point(obj.x, obj.y);
var origTimestamp:Number = getTimer();
var currentPos:Point = new Point();
currentPos.x = obj.x;
currentPos.y = obj.y;
var speed:Number = currentPos.subtract(origPos).length/(getTimer() - origTimestamp);
Если вы не уверены, следует ли заменять анимацию движения или нет origPos
а также origTimestamp
после каждого измерения.