Это на самом деле не тривиальная вещь, поэтому на «полный» ответ можно надеяться. Здесь - ссылка на пример автомобиля в box2d.Посмотрите демораль этого джентльмена (третье демо в ролике наиболее актуально), и взгляните на его исходный код.Его симуляция немного более продвинута, чем то, что вам нужно сделать, поэтому, если вы поймете, как это работает, у вас не возникнет проблем при создании более простой версии.
В box2d dougk16 много кода (понятно), что понятно (понятно)расширение, так что может быть сложно понять, как именно работает его машина.Итак, вот простая отправная точка: вы хотите смоделировать тело, которое может двигаться вперед и назад, а также поворачиваться.Так что это одна сила, которая распространяется вперед или назад от текущей поверхности корпуса вашей лодки, и один момент, который повернет тело влево или вправо.Это должно быть все, что вам нужно, чтобы получить что-то очень крутое.Вот некоторый псевдокод, который будет разумным местом для начала:
if( needs_to_turn )
{
// turn_direction will either be -1 (left) or 1 (right), boat_torque can be a constant to start with, but should probably be controlled by the user
body.ApplyTorque(turn_direction * boat_torque);
}
if( needs_to_move )
{
// facing_vector should be a vector pointing in the direction the boat is facing, the boat_force could be a constant, but again should be controlled by the user
body.ApplyForce(facing_vector * boat_force);
}
Я закончу свой ответ еще одной ссылкой , на этот раз на соответствующий учебник.Это не так круто, как в сценарии действий dougk16, но может быть более полезным для вас, поскольку оно в формате учебника.