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