2012-05-05 12 views
2

私はタンクイメージの上に銃の画像を持っています。私は銃がマウスの位置に向かって指しているようにして、マウスを使って目指すことができます。元の銃の画像は上を向いています。私はSlick2Dを使用していて、画像クラスには角度を取る回転機能があります。これをどうやってやりますか?画像を「ポイント」にマウスの位置に回転

答えて

7

入力オブジェクトを確認することで、ユーザーのマウスの位置を見つけることができます。これは、GameContainerに入力を求めることによって行われます。

Input userInput = gameContainer.getInput(); 
float mouseX = userInput.getMouseX(); 
float mouseY = userInput.getMouseY(); 

マウスと銃の位置は、銃が直面する必要がある角度を決定するために使用できます。銃とマウスの間に線を描き、この線の角度を見つけることができます。この角度は、マウスがマウスを指すために銃が直面する必要がある角度です。

Vector2f gunLocation = gun.getLocation(); 
float xDistance = mouseX - gunLocation.x; 
float yDistance = mouseY - gunLocation.y; 
double angleToTurn = Math.toDegrees(Math.atan2(yDistance, xDistance)); 
gunImage.setRotation((float)angleToTurn); 
+0

おかげで、私は私のゲームにコードを入れて、それが一種の働いていました。銃は回転しますが、私の半分の速度でしかマウスを動かすことはできず、マウスを銃の反対側に動かすと、他の方向に回転し始めます。あなたは何が間違っているのか知っていますか? –

+0

興味深い。これは本質的に私自身のゲームのコードスニペットなので、私はそれがうまく機能していると確信しています。 Math.atan2を使用していることを確認していますか? Math.atanには[pi/2、-pi/2]の範囲があるのに対して、Math.atan2には[pi、-pi]の範囲がありますので、私は尋ねます。 –

+0

Tankクラスの更新関数のコードは次のとおりです。http: //pastebin.com/KsQUWdErこのクラスのインスタンスを宣言し、私の​​ゲームプレイ状態の更新セクションでこのメソッドを呼び出します。 –

0

このように行われる照準:

マウスにタンクからの方向は次のようである:

float deltaX = mouse.x - tank.x; 
float deltaY = mouse.y - tank.y; 

// The resulting direction 
return (int) (360 + Math.toDegrees(Math.atan2(deltaY, deltaX))) % 360; 

ちょうど現在のマウス位置、例えば、タンクの方向を更新しますmouseMovedイベントで発生します。画像の回転

"Graphics2D", "affine transform", "translation"

は、スタックオーバーフローまたはJavaドキュメントを見てください。おそらくあなたのエンジンはすでにいくつかのライブラリ関数を提供しています。

希望に役立ちます。

0

y軸は試して減少しているので...上記の回答に

を構築するには:

float deltaX = mouse.x - tank.x; 
float deltaY = tank.y - mouse.y; 
関連する問題