我试图通过施加正交(对身体方向)力并产生所需的扭矩来围绕其自身中心旋转身体。然而,这也会移动身体(自然),我只需要旋转。这是我的代码。请注意,我不想手动设置角度/方向,而是尝试使用此旋转力来实现它。
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);
答案 0 :(得分:5)
我不知道花栗鼠,但我知道一点物理 - 在相反的方向上向物体的中心施加第二个力,并适当地调整其大小以对抗不希望的运动。
就像是有一个安装在固定轴上的车轮 - 当你向车轮边缘施加一个力时,它会旋转而不向前移动,因为车轴会向相反的方向施加反作用力。