2011-06-24 9 views
0

壁に当たったときにスプライトの物理を実装する方法を理解しようとしています。 私は壁があり、スプライトは速度と重力で壁に当たっていると言うことができます。box2d(cocos2d)を使うと、速度、重力、角度を後退させ、物理的なヒットを物理的に適用できます。衝突などの?コンタクトリスナー?私は自分自身で次に起こることを計算し、体に新しい速度と力を加える必要がありますか? かbox2dは私にとってそれをしますか?スプライトが壁や別のスプライトに当たった

どのような方向でも良いでしょう。 ありがとうございます。

+0

cocos2dに付属のbox2dの使用例があります。彼らを見てください – Andrew

答えて

1

box2dはあなたのためにすべてを計算します。 2つの物体が衝突した後に何が起こるか心配する必要はありません。

あなたの体が地面に当たった場合、自然な反応として跳ね返ります。あなたは重力と反対の新しい力を加える必要はありません。すべての計算はbox2d物理エンジンによって行われます。物理エンジンはそのために作られています。

さらに、以下のような独自の力や衝動を適用することができます。それはあなた次第です。

b2Vec2 force = b2Vec2(100, 200); 
yourBody->ApplyLinearImpulse(force, yourBodyDefinition.position); 
+0

ありがとう、私は力を適用する方法を知っていますが、どうすればbox2dが衝突の隣に起こるかを計算させるべきですか?私は衝突を検出すると言う、次に何ですか?コンタクトリスナーはそれによってそれをする自己???私に例を挙げてもらえますか? – Curnelious

+0

何もしないでください。重力ベクトルを持つ世界を作成するだけです。その後、あなたの世界のエッジを設定し、あなたの体を作成します。 'init'メソッドで、 'tick'メソッドを継続的に呼び出すようにスケジュールします。この 'tick'メソッドでは、あなたの世界の 'step'メソッドを呼び出し、計算されたbox2d物理エンジン値でスプライトを更新します。 – erkanyildiz

+0

その権利はありません。私は世界を作りました.2つのスプライトが動いています。そしてtickメソッドで私はステップを呼び出します。スプライト1がスプライト2に到着すると、それは重複し、何も起こらないので動き続けます。私は何かをする必要があります、そして、衝突を検出することを除いて私はちょうどWHATを見つけることができますか? – Curnelious

関連する問題