0

私のゲームでは、矢印用の Ccsprite が 1 つと、ボール用の b2body が 1 つあります。矢印スプライトが指す方向にボールを投げようとしています。これが私のコードです...矢印スプライトの回転を数えてから、その角度でボールにインパルスを適用しています...

float totalRotation = arrow.rotation ;

ballBody->ApplyLinearImpulse(b2Vec2(10.0f+cos(totalRotation)*25.0f,10.0f+sin(totalRotation)*25.0f), eggBody->GetWorldCenter());

しかし、これは正確に機能していません...ボールが不適切な方向に投げられています。

4

1 に答える 1

0

rotationCCNode (および CCNode から継承する CCSprite)のプロパティは度で測定され、時計回りの回転が正です。Box2D の世界では、ラジアンで測定された角度が使用されます。反時計回りの回転が正であり、デカルト座標系ではより一般的です。Box2D 関数に正しい角度を提供するには、変換する必要があります。Cocos2D では、変換は次のようになります。

float angle = - 1 * CC_DEGREES_TO_RADIANS(totalRotation);

マクロは、totalRotation を度からラジアンに変換します。Box2D は反時計回りの正の角度を測定するため、-1 を掛けます。これは、CCNode 回転の反対です。

于 2013-01-24T13:27:58.460 に答える