【发布时间】:2014-09-06 13:40:34
【问题描述】:
我正在编写一个星际飞船游戏,并且刚刚完成了管理旋转的部分。我使用了一个简单的 if/else 语句来检查船是否必须正转或反转才能尽快面对目标。但是我看到 Rotation-Value 可以为负值,然后船确实旋转到错误的方向(它最终仍然面向目标点,但需要更长的时间)。请告诉我我做错了什么:(
功能:
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;
}
}
玩家级拥有这艘船。当玩家按下鼠标右键时,该方法将每帧调用一次,直到飞船到达光标所指的位置。
if (!Ship.RotateOrMove(Position))
Position -= Velocity;
因此,如果船不得不旋转而无法移动,它将移除之前添加的速度,以确保船不会移动。
希望你能理解我的问题^^
【问题讨论】:
-
是不是每次都转错方向?
-
@bubbinator 不,这有点罕见。但是当船指向东南并且我想将它转向西南时,它肯定会发生。