2012-03-15 12 views
11

私は入力としてマウスだけを使用する2Dゲームを持っています。 マウスをTexture2Dオブジェクト上に置いたときにTexture2Dとマウスカーソルが変化し、テクスチャをクリックすると別の場所に移動するようにするにはどうすればいいですか?2D XNAゲームのマウスクリック

簡単に言えば、私は上にマウスを置いたり、Texture2Dをクリックすると何かをする方法を知りたいと思います。

+0

これは、HTTPに属し://gamedev.stackexchange.com/ – RQDQ

答えて

30

XNAでは、Mouse classを使用してユーザー入力を照会することができます。

最も簡単な方法は、各フレームのマウス状態を確認し、それに応じて反応させることです。マウスの位置は一定の範囲内ですか?別のカーソルを表示します。このフレーム中に右ボタンが押されていますか?メニューを表示する。

var mousePosition = new Point(mouseState.X, mouseState.Y); 

変更マウスが特定の領域内にあるテクスチャ:

Rectangle area = someRectangle; 

// Check if the mouse position is inside the rectangle 
if (area.Contains(mousePosition)) 
{ 
    backgroundTexture = hoverTexture; 
} 
else 
{ 
    backgroundTexture = defaultTexture; 
} 

var mouseState = Mouse.GetState(); 

は(左上隅に対して)スクリーン座標にマウスの位置を取得します

マウスの左ボタンをクリックして何かをする:

if (mouseState.LeftButton == ButtonState.Pressed) 
{ 
    // Do cool stuff here 
} 

現在のフレームの情報があります。ボタンがクリックされている間にクールなことが起こることがありますが、リリースされるとすぐに停止します。

// The active state from the last frame is now old 
lastMouseState = currentMouseState; 

// Get the mouse state relevant for this frame 
currentMouseState = Mouse.GetState(); 

// Recognize a single click of the left mouse button 
if (lastMouseState.LeftButton == ButtonState.Released && currentMouseState.LeftButton == ButtonState.Pressed) 
{ 
    // React to the click 
    // ... 
    clickOccurred = true; 
} 

あなたはそれがさらに高度にし、イベントと仕事ができる:あなたが最後のフレームのマウスの状態を保存し、変更されたものを比較しなければならないシングルクリックを確認するために

。したがって、上記のスニペットを引き続き使用しますが、イベントを発生させるアクションのコード(MouseIn、MouseOver、MouseOut)を直接インクルードするのではなく、そのまま使用します。などButtonPush、のbuttonPressed、とButtonRelease、

+0

Rectangle.Containsにはポイントが必要なので、Mouse.GetState()によって返されたPointをVectorに変換した理由がわかりません。 – ClassicThunder

+0

ありがとう、ルーキス –

+0

しかしどのようにしてクリックを任意の位置のテクスチャに関連付けることができますか? 特定の矩形ではなく、任意の位置でクリックしたときに表示されます。 –

-1

私はちょうどあなたがそれのための変数を作成する必要がないように、マウスをクリックしてコードを簡素化することができることを追加したいと思います:

if (Mouse.GetState().LeftButton == ButtonState.Pressed) 
    { 
     //Write code here 
    } 
+0

これと元の質問の関係は何ですか? – jeteon