2D XNA游戏鼠标点击

本文关键字:鼠标 游戏 XNA 2D | 更新日期: 2023-09-27 18:27:55

我有一个2D游戏,其中我只使用鼠标作为输入。如何使鼠标悬停在Texture2D对象上时,Texture2D和鼠标光标发生变化,并在单击纹理时移动到另一个位置。

简单地说,当我悬停在Texture2D上或单击它时,我想知道如何做一些事情。

2D XNA游戏鼠标点击

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

请记住,您将始终拥有当前帧的信息。因此,虽然在点击按钮的过程中可能会发生一些很酷的事情,但一旦释放,它就会停止。

要检查单击,您必须存储上一帧的鼠标状态,并比较发生的变化:

// 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。按钮按压、按钮按下、按钮释放等

我只想补充一点,鼠标点击代码可以简化,这样你就不必为它创建变量:

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