Box2d - 鼠标关节设置为对象上的特定点

时间:2013-01-10 21:57:14

标签: objective-c cocos2d-iphone box2d game-physics

我有一个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);

touchingObject是我正在移动的对象,它将它的主体存储为属性。这段代码工作正常,它只是令人讨厌的旋转。

1 个答案:

答案 0 :(得分:2)

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

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

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