2012-05-11 3 views
1

問題は簡単かもしれません。私は今日、マウスが指している方向を決定し、その方向に弾を撃つアルゴリズム(おそらく二重のif文になるでしょう)を考えていました。私はすでに弾丸をテストして、決められた方向に射撃することを確認しました。Java 2dマウスでの撮影方向

マウスがプレーヤーの左側、右側、上側、下側、またはプレーヤーのコーナーにある場合、どのように計算するのですか?

解決済み:すべてのお手伝いをしてくれてありがとうございました。私は考え方の一日を過ごしました。私がしたのは、if文を使ってマウスを押下したときに、プレーヤー、下部、右、左、または角の上部と衝突するかどうかを判断することです。とにかく、ここに私のコードです。 P.S.変数x1をmousex、y1をmousey、xをplayerx、yをプレーヤーyとして使用しました。私が持っている唯一の他の変数はdxとdyですが、それらが何をしているのか知っていなければなりません。

//top 
if (x1 > x && x1 < x + 40 && y1 > y - 250 && y1 < y){ 
     dy = -1; 
    dx = 0; 
} 
//right 
if (x1 > x + 40 && x1 < x + 250 && y1 > y && y1 < y + 40){ 
    dx = 1; 
    dy = 0; 
} 
//bottom 
if (x1 > x && x1 < x + 40 && y1 > y+40 && y1 < y+250){ 
    dy = 1; 
    dx = 0; 
} 
//left 
if (x1 < x && x1 > x - 250 && y1 > y && y1 < y + 40){ 
    dx = -1; 
    dy = 0; 
} 
//top right corner 
if (x1 > x + 40 && x1 < x + 250 && y1 > y - 250 && y1 < y){ 
    dx = 1; 
    dy = -1; 
} 
//top left corner 
if (x1 < x && x1 > x - 250 && y1 > y - 250 && y1 < y){ 
    dx = -1; 
    dy = -1; 
} 
//bottom right corner 
if (x1 > x + 40 && x1 < x + 250 && y1 > y + 40 && y1 < y + 250){ 
    dx = 1; 
    dy = 1; 
} 
//bottom left corner 
if (x1 < x && x1 > x - 250 && y1 > y + 40 && y1 < y + 250){ 
    dx = -1; 
    dy = 1; 
} 
+2

実際の質問は何ですか?マウスの位置(x座標とy座標)を知っていて、銃の位置を知っていれば、単純な幾何学と数学で弾の角度やxとyの速度を決める必要があります。 – DGH

+0

私の実際の質問は、マウスがプレーヤーの左側、右側、上側、下側、またはプレーヤーの角にある場合の計算方法はどうですか? – 36redsoxfan

+2

単純代数があなたに答えますあなたが見ているすべてが一般的な方向であれば、三角法も必要ありません。あなたは何を試していますか、あなたのコードのどこにいらっしゃいましたか? –

答えて

1

マウスボタンを押している間に撮影を実行する場合は、マウス移動アクションリスナーを実装する必要があります。

単純な等式で行います。

解決策:ボタンを押すと、最初の点が(x0,y0)になります。マウスが動いている間に、マウスが動いているところ(これは絶えず変化します) - (x1,y1)ポイントを得る - ラインの式を得る - (slopeを見つけてequation of the lineを得るために2点を見つける。

今弾丸の発射方向はperpendicular to this line through (x1,y1)です。他の方程式が分かっているとき、この垂線の方程式を見つけることができます。今度は、銃が指し示されている方向(変数に方向を記憶させる)を見つけることに比べて、上下に発射する必要があるかどうかを知ることができます。

この後もマウスが動くと、古いポイントは(x1,y1)になります新しいポイントは(x2,y2)となり、これらの変更は引き続き実装されます。

+0

銃を揃えて(N)、下(S)、右(E)または左(W)を見つける方法を知りたい場合 - 最初の初期位置では、ゲーム開始時にある一定の位置)、プレーヤーがスクロールする(またはいくつかのボタンやキーで実装することができます)場合は、方向をNEまたはEまたはSEまたはSなどに、または任意の角度(度)に変更し、角度情報を変数 – Subs

関連する問題