Как постепенно повернуть объект лицом к другому, поворачивая на кратчайшее расстояние

В настоящее время я пытаюсь повернуть спрайт в зависимости от того, на сколько градусов (или рад, я предпочитаю градусы) он отличается от прямого взгляда на цель, проблема в том, когда цель достигает определенной позиции, и спрайты решают повернуться на 360 градусов в другую сторону вместо того, чтобы делать дополнительные 10. Это изображение, вероятно, лучше объясняет проблему:

Blue square = target, Red square = the object, green line = rotation it wants, black line = current rotation, brown arrow = how it rotates to achieve this, red arrow = how I want it to rotate.

Синий квадрат = цель

Красный квадрат = объект

Зеленая линия = вращение, которое он хочет

Черная линия = текущее вращение

Коричневая стрелка = как он вращается, чтобы достичь этого

Красная стрелка = как я хочу, чтобы он вращался.

Обратите внимание, что Случай 1 всегда работает, в зависимости от того, как он вращается, но Случай 2 всегда делает это вращение, независимо от того, находится ли он «вправо» или «влево» от текущего вращения.

Это код, который я использую для поворота объекта.

    Vector2 distance = new Vector2(target.worldPos.X - this.worldPos.X, target.worldPos.Y - this.worldPos.Y);
    float wantRot = (float)Math.Atan2(distance.Y, distance.X);
    if (this.rotation < wantRot)
        this.rotation += MathHelper.ToRadians(45) * Time.deltaTime;
    if (this.rotation > wantRot)
        this.rotation -= MathHelper.ToRadians(45) * Time.deltaTime;

Я хочу, чтобы он вращался (в случае 2) в соответствии с красной стрелкой вместо коричневой.

ПРИМЕЧАНИЕ: Я не специалист в программировании, я делал это только время от времени в течение последнего года (в основном простые 2D-шутеры / игры типа стрелялки), поэтому подробные объяснения будут оценены . Я тоже изучаю программирование.

PS: Предложения по названию также были бы признательны, так как я понятия не имел, что туда поместить.

13
задан Joel Coehoorn 9 December 2011 в 18:35
поделиться