Получение положения кончика спрайта при вращении - PullRequest
0 голосов
/ 20 мая 2018

Я хочу получить положение спрайта во время его поворота, Пример

Большая точка - это местоположение, которое я хочу получить (при вращении), а спрайт поворачивается так,это довольно трудно понять, и я не знаю, как его получить, источник (0,0) для любого, кто спрашивает, есть ли какая-то математика, которую нужно сделать, чтобы получить это?

1 Ответ

0 голосов
/ 21 мая 2018

Что вам нужно сделать, это создать Vector2 от начала координат до повернутой точки до того, как его повернут, а затем повернуть этот вектор.

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

enter image description here

Сначала создайтевектор от начала координат до точки, которую вы хотите повернуть на необращенном спрайте.В этом случае это, вероятно, будет примерно 20 пикселей справа от центра:

var vector = new Vector2(20, 0);

Теперь мы можем вращать наш вектор с помощью этой простой функции (заимствовано из MonoGame.Extended )

public static Vector2 Rotate(Vector2 value, float radians)
{
    var cos = (float) Math.Cos(radians);
    var sin = (float) Math.Sin(radians);
    return new Vector2(value.X*cos - value.Y*sin, value.X*sin + value.Y*cos);
}.

Теперь мы можем получить наш повернутый вектор следующим образом:

var radians = MathHelper.ToRadians(degrees: -33);
var rotatedVector = Rotate(vector, radians);

Чтобы вернуть этот вектор в «спрайтовое» пространство, мы можем добавить его обратно в нашу исходную точку:

var point = origin + rotatedVector;

Или, если хотите, в «мировом» пространстве, вы также можете добавить его в позицию своих спрайтов.

var worldPoint = position + origin + rotatedVector;

Счастливого кодирования!

...