Движение XNA по линии в 2D - PullRequest
       13

Движение XNA по линии в 2D

3 голосов
/ 01 марта 2011

Я пишу простую демонстрацию XNA, в которой спрайт должен двигаться вдоль линии (определенной двумя точками Vector2 (Ax, Ay) и (Bx, By)) с заданной скоростью V (понимаемой как расстояние налиния прошла в единицу времени).Я понимаю, что мне нужно вычислить x и y позицию в 2D-пространстве, используя уравнения, подобные этим:

dx = V*dt*cos(alpha)
dy = V*dt*sin(alpha)

, но принимая во внимание отрицательное значение V (например, при движении "назад").я не изобретаю велосипед, может быть, xna предлагает решение этого вопроса?

1 Ответ

4 голосов
/ 01 марта 2011

Создайте 2D-вектор из точки A в точку B, вычитая A из B. Нормализуйте его, разделив составляющие X и Y на длину вектора.Умножьте компоненты X и Y на скорость.Умножьте это на временной интервал (т.е. 20/1000 в течение 20 миллисекунд).Добавьте эти значения X и Y к вашей позиции.

Пример:

A is (2, 5)  B is (1, 8)
Speed is 2 (move 2 units in one second)
Time slice is 20 milliseconds since last update

C will be (-1, 3)
Normalize C by dividing by distance (sqrt(-1 * -1 + 3 * 3) = 3.1622777)
Normalized is (-0.316277, 0.9486833) (to move 1 unit that direction)
Multiply by speed (2): (-0.632554, 1.8973666)
For movement this time period, multiply by 20 and divide by 1000:
(-0.01265108, 0.037947332), move sprite this far this frame
...