1

我有一个 Box2d iphone 应用程序(使用 cocos2d),其中有一个鼠标关节,每当您使用鼠标关节时,它都会在您单击的任何点向对象施加力。我想知道是否有一种方法可以始终将力施加到物体上的某个点,例如物体的中心。原因是当我的形状是一个盒子时,例如,当我使用鼠标关节拾取它时,它会旋转,以便我点击的任何地方最终都朝向顶部。我想总是从物体的中心拿起物体。我试过放大惯性阻尼,但并没有完全达到我想要的效果。这是我当前的代码:

b2Vec2 locationWorld = b2Vec2(newtouch.x/PTM_RATIO, newtouch.y/PTM_RATIO);
b2MouseJointDef md;
md.bodyA = physicsLayer.groundBody;
md.bodyB = touchedObject.body;
md.target = locationWorld;
md.maxForce = 2000;

b2World* w = [physicsLayer getWorld];
mouseJoint = (b2MouseJoint*)w->CreateJoint(&md);

touchObject 是我正在移动的对象,它将它的主体存储为一个属性。该代码按原样工作正常,只是令人讨厌的旋转。

4

1 回答 1

2

您可以将目标点更改为框的质心:

md.target = touchedObject.body->GetWorldCenter();

这将使关节将盒子的中心拉到您手指所在的位置,而不是您触摸的点。如果它已经在旋转,它不会阻止它旋转,所以你可能仍然想在身体上使用一些角度阻尼来让它感觉更像是用户实际触摸它,而不是握住一个穿过中心的针它的:)

于 2013-01-11T07:46:24.743 回答