FLash AS3 – Как выразить разницу между двумя координатами xy как число от 0 до 1?

StackOverflow https://stackoverflow.com/questions/4123074

Вопрос

Я создал класс создателя видеороликов и класс аниматора, которые анимируют видеоролики по набору точек x,y.Для создания анимации я использовал TweenMax от Greensock и установил скорость между каждой точкой в ​​1 секунду.Проблема в том, что когда расстояние между двумя точками мало, оно выглядит слишком медленным.

Я хотел бы каким-то образом рассчитать расстояние между двумя точками и вывести скорость в диапазоне от 0 до 1 секунды, чтобы скорость была правильной как для более коротких, так и для более длинных расстояний.

Любая помощь или совет будут очень признательны.

Спасибо,

eb_dev

Это было полезно?

Решение

Я второй что Матти Сказано, но это можно сделать быстрее - стоимость от 48 до 64 кусочков памяти (оу, так много !!! ...)

var dX:Number = x1 - x2;
var dY:Number = y1 - y2;
var dist:Number = Math.sqrt(dX * dX + dY * dY);
var animTime = dist / state.stageWidth;

И объяснить это на EB DevЗапрос, квадратный корень, есть часть теоремы Пифагора:

a^2 + b^2 = c^2

Линии на осях x и y можно рассматривать как две ноги прямоугольного треугольника, и, следовательно, гипотенуза будет расстоянием между двумя конкретными точками (которые нам нужны).

Сначала мы вычитаем точки (x1 - x2, y1 - y2). У нас все еще есть две точки, однако, прямоугольная часть треугольника сейчас в 0, 0 - Точка, где оси x и y пересекаются. Чтобы иметь возможность применить это к теореме Pythagorean, давайте посмотрим, какой размер а. и преступность Будет - длина ноги а. расстояние между 0, 0 и точка 1. Вычитание 0, 0 все равно оставит нас с точкой 1 - однако, мы знаем, что это будет где -то на оси x - поэтому он будет 0. Мы можем сказать, что длина а. равна x часть точки 1.

То же самое касается преступность Нога и пункт 2. На этот раз, однако, мы получаем только это.

И рассчитать в, мы сначала суммируем вторые полномочия а. и преступность (a^2 + b^2). Теперь у нас есть C^2, чтобы получить в - Hypotenuse, мы рассчитаем его квадратный корень (то есть math.sqrt () в AS3.0).

в это расстояние.

Надеюсь, это объяснит это.

Другие советы

Я думаю, вам нужна минимальная скорость для меньшего расстояния.

const MIN_SPEED:Number = ???// adjust this value
var distance:Number = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
var duration:Number = Math.min(1.0, distance / MIN_SPEED);

для большого расстояния 1,0 < расстояние/MIN_SPEED, а продолжительность будет установлена ​​на 1,0 [сек]
для небольшого расстояния 1,0 > расстояние/MIN_SPEED, и продолжительность будет установлена ​​на некоторую скорость, определенную MIN_SPEED.

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

Итак, допустим, что анимация по всей ширине сцены составляет одну секунду, и все короче, чем по отношению к этой секунде.

dist = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
animTime = dist / state.stageWidth;

Обновление: Math.SQRT просто берет квадратный корень разницы между точками. Вам не обязательно нужно делать это, так как вы заинтересованы только в расстоянии по сравнению с размером сцены, а не на фактическом расстоянии. Причина, по которой есть расстояние в том же масштабе, что и stage.stageSize. Отказ Обратите внимание, что (x1-x2)*(x1-x2) квадрат расстояние между x1 и x2 Координаты, т.е. равно Math.pow(x1-x2,2).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top