0

我正在努力学习和理解 box2d。这是我的问题:

我正在尝试制作一辆简单的汽车,车身现在看起来像这样:

在此处输入图像描述

现在我正在尝试添加一个轮子,创建轮体,并假设我将使用 b2RevolutionJoint 将轮子链接到车身。

在我到达那个部分之前,我只想能够将轮子定位在它的位置上,所以相对于 bodyCar Body。我该如何正确地做到这一点?

我在网上看到的是这样的:

bodyDef2.position.Set(axle2->GetWorldCenter().x + 1.3*cos(-M_PI/3), axle2->GetWorldCenter().y + 0.3*sin(-M_PI/3));

但是,我不明白该表达式的 cos 和 sin 部分。

我想要做的是:

backWheelDef.position = b2Vec2(carBody->GetWorldCenter().x - 20.0/PTM_RATIO,carBody->GetWorldCenter().y);

由于我的 carBody 顶点定义如下所示:

b2Vec2 vertices[] = {
        b2Vec2(100.0/PTM_RATIO,15.0/PTM_RATIO),
        b2Vec2(100.0/PTM_RATIO,30.0/PTM_RATIO),
        b2Vec2(50.0/PTM_RATIO,65.0/PTM_RATIO),
        b2Vec2(20.0/PTM_RATIO,65.0/PTM_RATIO),
        b2Vec2(0.0/PTM_RATIO,45.0/PTM_RATIO),
        b2Vec2(0.0/PTM_RATIO,15.0/PTM_RATIO)

    };

上述定位轮子的方法的结果看起来有点正确(见下面的截图),但如果你看看上面的数字,它没有多大意义。

由于 carBody 宽度为 100.0/PTM_RATIO,我假设 GetWorldCenter().x 将返回一个等于 50.0/PTM_RATIO 的值。

所以车轮位置会在 30.0/PTM_RATIO 计算之后,对吗?

好吧,如果您查看下面的结果,车轮 x 定位似乎在 20.0/PTM_RATIO。

在此处输入图像描述

有人可以解释一下如何在 Box2D 中使用与其他机构相关的定位机构吗?一旦我清楚了这些事情,我将继续使用关节将它们连接起来

非常感谢!

稍后编辑基于 iforce2d 答案:

感谢 iforce2d 的回答,并感谢您在 box2d 世界中提供的所有良好见解。你说的完全正确,但这不是我的问题。

一旦我发现 GetWorldCenter 返回重心,GetPosition 返回对象的位置原点,就很容易将我的轮子准确地放置在我需要它与 carBody 相关的位置。尽管我仍然得到它出现在身体下方的行为,但我知道一旦我将关节添加到方程中,这将得到修复。

现在我有另一个与这个定位问题有关的问题。看看下面的图片:

在此处输入图像描述

一旦我将它们的锚点设置如下,这是我的关节应该看起来的正确方式吗?我对他们从原点而不是从锚点A到锚点B有点困惑

再次感谢!

4

1 回答 1

2

您首先将车轮放在车身内部,因此在前两到三个时间步长中,两个车身将移动以纠正重叠。它可能发生得如此之快以至于你看不到它,但有明显的迹象,即车轮恰好位于汽车边缘,车身略微旋转。

如果您暂停模拟(只是不要调用 Step),您应该会看到您希望看到的物体。

添加关节后,默认行为是两个连接的实体不会相互碰撞,因此您不会看到此问题。

于 2012-11-25T21:01:28.060 回答