Итак, у меня есть корабль с двигателем внизу и который может использовать их только для перемещения вперед. Он также может вращаться вокруг своего центра. Его подруливающие устройства дают ускорение, поэтому он не движется с постоянной скоростью. Я хочу сказать, что это «переместиться в точку B».Перемещение объекта из точки a в b (в 2D), который может двигаться только вперед и вращаться.
У меня есть решение, но оно не работает очень хорошо, и оно не вращается плавно, оно двигается рывком, и оно не заканчивается именно там, где оно должно быть, поэтому мне нужно иметь большой погрешность.
Это обычная проблема, и если да, то есть «стандартный» способ сделать это? Это легкая проблема? Я хочу, чтобы это выглядело так, будто корабль руля себя к этому моменту, используя ограничения (движители, вращение) игрока. Это исключает возможность просто отрывать его от точки А до Б. Или это так?
Я хотел бы помочь в решении этой проблемы. Позиции хранятся в векторах, и это двумерная проблема. Для справки я включаю свое решение, которое в основном ускоряет корабль до тех пор, пока оно не повернет его, чтобы указать на точку. Я думаю, что моя реализация этой идеи является проблемой:
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