2

我试图通过施加正交(与身体方向)力并产生所需的扭矩来围绕自己的中心旋转身体。但是,这也会(自然地)移动身体,我只需要它来旋转。这是我的代码。请注意,我不想手动设置角度/方向,而是试图通过使用这种旋转力来实现。

cpFloat dot = cpvdot(turningN, cpvnormalize_safe(cpBodyGetRot(body)));
cpFloat cross = cpvcross(turningN, cpvnormalize_safe(cpBodyGetRot(body)));


cpVect rotN;
if (cross<=0) {
    rotN = cpvperp(cpvnormalize_safe(cpBodyGetRot(body)));
}else{
    rotN = cpvrperp(cpvnormalize_safe(cpBodyGetRot(body)));
}

cpVect rotF = cpvmult(rotN, 300*(1-dot));
cpBodyApplyForce(body, rotF, cpv(75,14));

turningN是指示身体应该具有的方向的向量。我制作了点积,这样当身体的方向朝向所需方向时,我应用的旋转越来越少。

编辑

因此,正如@DGH 指出的那样,我们需要添加一个方向和大小相同但与我们的旋转力相反且朝向物体中心的力。所以,我只需要添加这行代码就可以了:

cpBodyApplyForce(body, cpvneg(rotF), cpvzero);

4

1 回答 1

5

我不知道花栗鼠,但我知道一点物理学 - 向相反方向的物体中心施加第二个力,并适当地缩放其大小以抵消不希望的运动。

这就像一个轮子连接到一个固定的轴上——当你对轮子的边缘施加一个力时,它会旋转而不向前移动,因为轴会在相反的方向上施加一个反作用力。

于 2012-08-17T20:20:09.767 回答