2011-08-02 9 views
2

私はまだ爆弾シミュレーションを作成する方法を理解しようとしています。私はボールと爆弾を持っています。ボールが爆弾と衝突して爆弾が爆発し、ボールが投げ込まれたボールが強制的に投げ込まれます。爆弾を作成する - Cocos2d/Box2d

今私はApplyLinearImpulseを使用していますが、特定の方向。私はちょうどボールが今までどの方向にそれがでスローされた強制する必要がある。例えば

ボールは爆弾の左上側に投げられたが、その後、ボールを押し上げとしています左。 爆弾の左下側にボールが投げられた後、ボールは左下に押し出されます。

基本的には、爆弾である必要があります。誰も私にこのことを教えてもらえますか?私はBox2dを初めて使っています。

これは私が今使用しているものです。

-(void) explodeBomb 
{ 
    b2Vec2 force = b2Vec2(-20,20); // give the direction for the force. 

    _ballBody->ApplyLinearImpulse(force, _ballBody->GetWorldCenter()); 
} 
+0

は方向がちょうど 'の方向にすべきではありませんpos(bomb) - pos(ball) '? – bdares

答えて

4

あなたは数学が必要です。身体のと爆弾の位置を仮定すると、それぞれbodyPositionbombPositionである:

double diffX = bodyPosition.x - bombPosition.x; 
double diffY = bodyPosition.y - bombPosition.y; 
double distance = sqrt(diffX * diffX + diffY * diffY); 
double normalizedX = diffX/distance; 
double normalizedY = diffY/distance; 

は今、あなたは20単位の力を適用すると仮定すると:

float factor = 20.0f; 
b2Vec2 force(normalizedX * factor, normalizedY * factor); 
_ballBody->ApplyLinearImpulse(force, _ballBody->GetWorldCenter()); 
+1

この奇妙なことはしませんが、私はあなたを愛しています。それが正確に私が話していたものなので、あなたがしたことを私に説明してください。 – Jonathan

+0

@Jon:基本的に上記のコードの最初のブロックは方向の正規化ベクトルを計算し、2番目のコードブロックは適用する力に基づいて正規化されたベクトルを拡大します。 p/s:正規化されたベクトルは、1単位の長さを持つベクトルです。 – Lukman

関連する問題