1

キャノンボールとスモークパーティクルエフェクトを発射するキャノンがあります。キャノンボールをキャノンの端から開始します。これは、キャノンの幅をx位置に追加し、高さの半分を大砲。これは、大砲が回転していない場合は正常に機能しますが、大砲を回転させると正しい位置になりません。これは、私がベクトルを回転させようとするために使用するものです。

Vector2 rotPos = cannon.position.tmp().add(cannon.bounds.width, cannon.bounds.height/2).rotate(cannon.angle);

正しい場所で大砲のボールを発射する回転ベクトルを取得するにはどうすればよいですか。下の画像を参照してください。 ここに画像の説明を入力してください

UPDATE以下も試してみましたが、同じ結果でボールが左にずれています

Vector2 rotPos = world.CannonBody.getWorldVector( world.CannonBody.getPosition() );
4

2 に答える 2

0

あなたが問題を説明した方法では、1 つのケースだけを解決しました。これは本当にただの数学の問題です。発射したい方向、大砲の銃身を円上の座標と考えてください。

角度が分かっているので、これは簡単です。中心に点がある円を描きます。次に、中央から右端まで線を引きます。次に、最初の線から 45 度の角度で別の線を引きます。エッジ上の 2 点を直線で結びます。これで三角形ができました。

45 度の角度線を 'r' と呼びましょう。最初の行を x、最後の行を y とします。

次のようなものが必要です: http://i.stack.imgur.com/MJNWZ.jpg

sin(angleInRadians) = y/r であることがわかっています。少し代数を行うと、これを r*sin(angleInRadians) = y に変更できます。

ブーム、あなたはあなたのy座標を持っています。

ほとんど同じこと: cos(angleInRadians) = x/r

r*cos(angleInRadians) = x

あなたのx座標があります。

box2d から体の角度を直接取得できるので、簡単です。与えられた角度で大砲のバレルを概念化するために使用している円の正しい半径を表す「r」の値を選択するだけです。大砲が円の中心を中心に回転する場合、r は大砲の長さです。

于 2013-07-16T00:30:15.660 に答える