我试图通过施加正交(与 body 方向)力并产生所需的扭矩来使 body 绕其自身中心旋转。然而,这也会移动 body (自然地),我只需要它来旋转。这是我的代码。请注意,我不想手动设置角度/方向,而是尝试通过使用此旋转力来实现。
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
是指示 body 应有的方向的向量。我制作点积,以便当 body 的方向朝所需方向移动时,我应用越来越少的旋转。
编辑
因此,正如 @DGH 指出的那样,我们需要添加一个方向和大小相同但与旋转力相反并朝向物体中心的力。因此,我只需要添加这行代码即可使其工作:
cpBodyApplyForce(body, cpvneg(rotF), cpvzero);
最佳答案
我不了解花栗鼠,但我了解一点物理学 - 在相反方向向物体中心施加第二个力,并适当缩放其大小以抵消不需要的运动。
这就像一个固定在固定轴上的轮子 - 当您向轮子边缘施加力时,它会旋转而不向前移动,因为轴会在相反方向施加反作用力。
关于vector - 在 Chipmunk 中对物体施加正交力,使其绕其中心旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12012615/