1

パック (円形の器具) とバット (ユーザーのマウスの動きによって指示される) を備えたサンドボックスがあります。ユーザーがパックを打った場合、マウスの移動速度に基づいてインパルスを取得したいと考えています。しかし、私は問題があります:

  • コリジョン デリゲートでは、バットの線速度を確認すると、0|0 または完全にランダムなもののいずれかになります (らしい)。
  • パックに一定の衝撃を与えるだけなら、バットの移動速度は含まれません。
  • 衝撃をパックの中心ではなく、2 つのボディの接触点に適用したいと考えています。衝突が発生した場合、そのポイントの座標にアクセスする方法はありますか?

これを解決する正しい方法は何ですか?

4

1 に答える 1

0

FarseerのXNAサンプルを見てそれを理解しました。ジョイントを作成する必要があります。具体的には、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();
于 2012-02-16T21:31:32.940 に答える