Я программирую звездолетную игру и только что закончил часть, которая управляет вращающейся. Я использовал простой if/else-statement, чтобы проверить, должно ли судно вращаться положительно или отрицательно, чтобы как можно быстрее противостоять цели. Но я видел, что значение Rotation-Value может стать отрицательным, а затем корабль вращается в неправильном направлении (он по-прежнему сталкивается с целевой точкой в конце, но это занимает больше времени). Скажите, пожалуйста, что я сделал неправильно :(XNA Отрицательное вращение?
Функцию:
public bool RotateOrMove(Vector2 position)
{
if (IsRotationg == null) //todo
{
Vector2 direction = Position - position;
direction.Normalize();
FinalRotation = (float)Math.Atan2(-direction.X, direction.Y);
IsRotationg = true;
}
if (Equals(FinalRotation, Rotation))
IsRotationg = false;
if (IsRotationg == false)
{
Position = position;
return true;
}
else
{
if (FinalRotation >= Rotation)
{
Rotation += RotationVelocity;
if (FinalRotation - Rotation < RotationVelocity)
{
Rotation = FinalRotation;
IsRotationg = false;
}
}
if (FinalRotation < Rotation)
{
Rotation -= RotationVelocity;
if (FinalRotation - Rotation > -RotationVelocity)
{
Rotation = FinalRotation;
IsRotationg = false;
}
}
return false;
}
}
Игрока класс владеет Ship Когда игрок нажмите правую кнопку мыши, этот метод будет вызываться один раз за кадр, пока. судно достигает положения, когда курсор указывает на.
if (!Ship.RotateOrMove(Position))
Position -= Velocity;
Так что, если судно было поворачивать и не мог двигаться, он будет удалять скорость его добавляют непосредственно перед, чтобы гарантировать, что судно не будет двигаться .
Надеюсь, вы поймете мою проблему ^^
ли это вращающееся неправильное направление каждый раз? – bubbinator
@ bubbinator Нет, это редкость. Но это точно, когда корабль указывает на юго-восток, и я хочу превратить его на юго-запад. – Terrenay