2010-12-01 11 views
3

いいえ、私は2つの角度を持っています。 1つはジョイスティックの角度で、もう1つはカメラとプレーヤーの角度です。カメラの角度。今私はそれが欲しいので、私はジョイスティックを押すと、それはカメラから離れてプレーヤーを移動します。どうすればいい? JavaやArdor3dで簡単な方法がありますか?2つの角度を追加する

編集:ここに私のアングルを得る方法のコードです。

float camDegree = (float) Math.toDegrees(Math.atan2(
        _canvas.getCanvasRenderer().getCamera().getLocation().getXf() - colladaNode.getTranslation().getXf(), 
        _canvas.getCanvasRenderer().getCamera().getLocation().getYf()) - colladaNode.getTranslation().getYf()); 

      player.angle = (float) Math.toDegrees(Math.atan2(padX, padY)); 
      Quaternion camQ = new Quaternion().fromAngleAxis(camDegree, Vector3.UNIT_Y); 
+0

がどのようにあなたの「角度」が表現されていますか?あなたは実際に3次元で作業しているのですか、3D APIだけを使用していますか? –

+0

実際に私はちょうどXとZ軸を使用しているので、それは2dです。主な質問に少しのコードを追加します。 – William

答えて

8

私は本当にあなたの質問を理解していないことを言っているが、ジョイスティックを使ってカメラの相対制御を実装する方法についてのようです。

私が与えることができる最も重要なアドバイスは、角度を計算するのではなく、ベクトルで直接作業する方が良いことです。

カメラが向きV(ゲームのいくつかのタイプでは、このベクトルはプレイヤーに直接指しますが、常にではない、すべてのゲームの種類、およびない)で見ていると仮定します。

the look vector from a camera to a player can be resolved into vertical and horizontal components

通常は、このベクトルの垂直成分を気に、私は後で明らかになる理由のためにYと呼ぶことにします水平成分を、得るためにそれを削除しないでください:

Y = Vからアップが上向き垂直指す単位ベクトルである(Vアップ

アップ

我々は(右手の法則と思い出す)外積を用いYに垂直の水平方向のベクトルを見つけることができる:

X = V×

アップ

the vectors x and y form a horizontal coordinate basis

yは前方を向いている(カメラから離れている)ベクトルであり、xは右を向いている平面(カメラに対しては横向き)のベクトルです。あなたはこれらのベクトルを正規化した場合:

X = X/| x |

= y/| y |

あなたはプレーヤーのカメラの相対運動のための座標の基礎としてXy^を使用することができます。ジョイスティックの読みがJxをJyがある場合には、(JyがJxを y^をX + )を

でプレイヤーを移動

sは、プレーヤーの速度に比例した適切なスカラー値です。

(無角はこの回答に任意の時点で計算されなかったことに注意!)

関連する問題