Векторная математика, нахождение угла - PullRequest
2 голосов
/ 13 декабря 2010

Я пытаюсь изучить XNA, написав небольшую 2D-игру, это перспектива сверху вниз, и я пытаюсь сделать двойное движение, перемещаясь вдоль оси с помощью клавиш «Влево» и «Вверх», а также смотря вправо курсор мыши, чтобы игрок мог бегать и целиться одновременно.

У меня есть один вектор для позиции игрока (m_PlayerPos) и один вектор для позиции мыши (m_MousePos), и я пытаюсь получить правильный угол к позиции мыши.

Я использую метод формулы:

public static float Angle(Vector2 from, Vector2 to)
{
    return (float)Math.Atan2(from.X - to.X, from.Y - to.Y);
}

Это работает, но по какой-то причине метод работает только наполовину, вдоль оси X. Когда мышь находится точно слева от игрока, игрок смотрит прямо на мышь.

Но если я подхожу к верхней части плеера, он смотрит вниз, а если мышь находится ниже плеера, игрок смотрит вверх. Так что мне нужно инвертировать ось Y, но я не уверен, как.

Заранее спасибо за любые отзывы.

Ответы [ 3 ]

2 голосов
/ 13 декабря 2010

Использование to.Y - from.Y.

0 голосов
/ 13 декабря 2010

В экранном пространстве начало координат находится в верхнем левом углу, ось Y направлена ​​вниз, тогда как в пространстве Евклида ось Y направлена ​​вверх. Вот почему вы наблюдаете, как ось Y «переворачивается».

0 голосов
/ 13 декабря 2010

Умножьте его на (0.0, -1.0) (или просто умножьте компонент Y на -1.0). Это отразит вектор вдоль горизонтальной оси и должно достичь желаемого результата.

...