Поворот 2D-изображения к точке в C # - PullRequest
3 голосов
/ 03 июля 2011

Я работал с вращающимися спрайтами Texture2D. Я использовал:

круг с плавающей точкой = MathHelper.Pi * 2;
RotationAngle = RotationAngle% circle;

и

ScreenManager.SpriteBatch.Draw (car, screenpos, null, Color.White, RotationAngle, car_origin, 1.0f, SpriteEffects.None, 0f);

по большей части для обработки вращения моей тестовой текстуры "машина". Кажется, что угол поворота Pi * 2 - это значение от 0 до -6,283185 или от 0 до 6,283185 в зависимости от направления. Теперь я хотел бы повернуть текстуру в определенном направлении (скажем, текстура является стрелкой) в направлении местоположения (вектор2, например, текущее положение мыши). Я не совсем уверен, как поступить, как мне нужно изменить этот угол поворота на основе положения вектора 2.

1 Ответ

5 голосов
/ 03 июля 2011

Вам не нужно переносить угол при передаче его на SpriteBatch.Draw. Но если вы хотите по какой-то причине обернуть угол, лучше использовать MathHelper.WrapAngle ( MSDN ).

Теперь скажите, что у вас есть Vector2, который представляет направление и расстояние (как вы могли бы, например, если бы вы сделали mousePos - carPos, для направления и расстояния от автомобиля до курсора). И вы хотите взять это направление и преобразовать его в угол. Используйте метод расширения , например, такой:

public static float Angle(this Vector2 v)
{
    return (float)Math.Atan2(v.Y, v.X);
}

Итак, чтобы получить свой угол, вы должны сделать что-то вроде: (mousePos - carPos).Angle().

Подробнее см. Документацию для Atan2.

...