2012-02-19 9 views
1

私は、基本的にボールのトップダウンビューでゲームを行っています。私がボールをクリックすると、基本的にはボールを特定の方向に発射したい。それは瞬間的な力(キューでプールボールを打つことを考える)です。私はこれを行うにはapplyImpulseを使用しようとしています。Cocos2d + Chipmunk Physics - cpBodyApplyImpulse()

は、これまでのところ私が持っている:

cpBodyApplyImpulse(sprite.body, 
        cpBodyLocal2World(sprite.body, cpv(0.0, 1.0)), 
        cpBodyLocal2World(sprite.body, cpv(0.0, 0.0)) 
); 

私はそれを理解するように、この機能がでとる2つのベクトルは、「世界的にCOORDS」であるので、私がやっていることは、体の相対座標のすべてを可視化されますそれらを世界の座標に変換します。

私の上記のコードから、重心に適用された正のy方向のベクトルであるため、ボールはまっすぐに回転しないと思うでしょう。しかし、ボールは右に移動し、制御不能に回転します。これがどうして起こっているのか、私がやろうとしていることをどのように達成するのか?

答えて

1

cpBodyApplyImpulseは、ワールドではなくボディ座標で入力を受け取ります。

はこれを試してみてください:

cpBodyApplyImpulse(sprite.body, 
        cpv(0.0, 1.0), 
        cpv(0.0, 0.0)); 
+0

感謝を。それがうまくいって、私はそれを逃したとは信じられません。もう少し簡単な質問ですが、これについて長年考えていたかもしれませんが、どのようにベクトルを単一点として定義することができますか?ベクターの由来はどこですか? –

+0

この場合、両方のベクトルの原点はあなたの体の重心です。ベクトル(0,0)は何もオフセットしないことを意味します。 (あなたが以前に持っていたスピンは、ワールド座標系でこのベクトルは0,0ではなかったので、オブジェクトの片側に力を加えていたからです) – deanWombourne

+0

ありがとうございました。 –

関連する問題