iPhone 用のトップダウン ゲーム (無重力) があり、Cocos2d と Box2d を使用しています。
このコードで弾丸を動かそうとします:
// 'targetPosition' is a point of touch
b2Vec2 touchInWorld = b2Vec2(targetPosition.x/PTM_RATIO, targetPosition.y/PTM_RATIO);
b2Vec2 direction = b2Vec2(touchInWorld.x - ballBodyDef.position.x, touchInWorld.y - ballBodyDef.position.y);
b2Vec2 force = b2Vec2(direction.x, direction.y);
force.Normalize();
ballBody->ApplyLinearImpulse(force, ballBodyDef.position);
問題は、スプライトが小さい場合 (10x10 ピクセル)、ボールが速く動くことです。
スプライトが 50x50 の場合、速度は遅くなり、問題ないように見えます。
速度をまったく制御できないので、気が狂ってしまいます。
それだけでなく、 force.Normalize() を入れないと、タッチの方向によって速度が異なります...
Cocos2d とアニメーションだけを使用していたときは、すべてうまく機能していました。Box2d を使用して衝突を実装しようとしましたが、自分で物理演算を行うことを検討しているほどの膨大な労力のようです :(