如何让两个物体在Farseer中碰撞并将冲动传递到第二个物体?

时间:2012-02-16 10:42:21

标签: box2d farseer

我有一个带有冰球(圆形夹具)和蝙蝠的沙箱(由用户的鼠标移动指示)。如果用户击中冰球,我希望它根据鼠标移动速度获得冲动。 但是我有问题:

  • 在碰撞委托中,如果我检查蝙蝠的线性速度,它是0 | 0或者是完全随机的东西(似乎)。
  • 如果我只是给冰球一个不断的冲动,那么就不包括球棒的移动速度。
  • 我想在两个身体的接触点处施加冲动,而不是在冰球的中心。如果发生碰撞,有没有办法访问该点的坐标?

解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

通过查看XNA的Farseer样本来计算出来。 你必须创建一个Joint,更具体地说,是一个FixedMouseJoint:

oPlayerJoint = new FixedMouseJoint( this.oPlayerBat, this.oPlayerBat.Position )
{
  MaxForce = 1000f * this.oPlayerBat.Mass
};
this.oWorld.AddJoint( this.oPlayerJoint );

然后在更新游戏逻辑时,如下所示:

MouseState oMouseState = Mouse.GetState();
Vector2 oMousePos = new Vector2(oMouseState.X - GAMEFIELD_WIDTH / 2f, oMouseState.Y - GAMEFIELD_HEIGHT / 2f);
// Make the bat follow the mouse.
this.oPlayerJoint.WorldAnchorB = oMousePos.ToPhysicsUnits();