这实际上不是一件微不足道的事情,因此“完整”的答案有点令人期待。这是 box2d 中汽车示例的链接。查看那个绅士的演示(卷轴中的第三个演示是最相关的),并看看他的源代码。他的模拟比你需要完成的要先进一点,所以如果你能理解它是如何工作的,那么创建一个更简单的版本就没有问题了。
dougk16 的 box2d 扩展中有很多代码(可以理解),因此可能很难弄清楚他的汽车是如何工作的。所以这里有一个简单的起点:您想模拟一个可以前后移动以及转动的身体。因此,这是一种从您的船体当前朝向向前或向后延伸的力,以及一种使船体向左或向右转动的扭矩。这应该是您获得非常酷的东西所需的全部内容。下面是一些伪代码,可以作为一个合理的起点:
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 的动作脚本那么酷,但它可能对你更有用,因为它是教程格式的。