web-dev-qa-db-ja.com

2D XNAゲームのマウスクリック

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

簡単に言えば、Texture2Dにカーソルを合わせたりクリックしたりしたときに何かを行う方法を知りたいのです。

13
Ahmed Hegazy

XNAでは、 マウスクラス を使用してユーザー入力を照会できます。

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

var mouseState = Mouse.GetState();

画面座標でのマウスの位置(左上隅を基準)を取得します。

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;
}

マウスの左ボタンがクリックされている間に何かを行います:

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

ただし、常にcurrentフレームの情報があることに注意してください。そのため、ボタンがクリックされている間に何かクールなことが発生する可能性がありますが、ボタンを離すとすぐに停止します。

シングルクリックを確認するには、最後のフレームのマウスの状態を保存し、変更内容を比較する必要があります。

// 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など.

32
Lucius