所以我有一艘船,底部有推進器,只能用這些推進器向前移動。它也可以圍繞其中心旋轉。它的推進器使其加速,所以它不會以恆定速度移動。我想要做的是告訴它「移到B點」。移動物體從a點移動到b點(2D),只能向前移動並自行旋轉
我已經想出了一個解決方案,但它不能很好地工作,它不能平穩地旋轉,它動作輕快,並且不會完全到達它應該在的位置,所以我必須有一個大的誤差範圍。
這是一個正常的問題,如果是的話是否有一個「標準」的方式呢?這是一個容易的問題?我想讓它看起來像船在使用球員所具有的約束(推進器,旋轉)來轉向自己。這不包括從A點到B點,還是它?
我想解決這個問題的一些幫助。職位存儲在向量中,這是一個二維問題。僅供參考,我包括我的解決方案,它基本上是加速船直到旋轉它指向的重點。我覺得我實現這個想法的是這個問題:
Vector diff = vector_sub(to_point, pos);
float angle = vector_getangle(diff);
float current_angle = vector_getangle(dir);
float angle_diff = rightrange(angle) - rightrange(current_angle);
float len = vector_getlength(diff);
// "Margin of error"
float margin = 15.0;
// Adjust direction, only if we're not stopping the next thing we do (len <= margin)
if (len > margin && fabs(angle_diff) > 2.0)
{
dir = vector_setangle(dir, current_angle + (angle_diff)*delta*(MY_PI) - MY_PI/2);
}
else if (len > margin)
{
dir = vector_normalize(diff);
}
// accelerate ship (if needed)
acc.x = acc.y = speed;
acc = vector_setangle(acc, vector_getangle(dir));
if (len <= margin)
{
// Player is within margin of error
}
對船舶的旋轉方式有任何限制嗎?例如,它可以旋轉180度在一個單一的刻度?或者你執行最大的角加速度? – Kevin
如果這是你的意思,那麼船隻被限制在每秒360度? – ErikPerik
「指引自己到位」?你的意思是它只有在運動時纔會改變方向?或者它可以旋轉到位,然後推動? – Beta