C# 2D XNA游戏鼠标点击

C# 2D XNA游戏鼠标点击,c#,xna,C#,Xna,我有一个2D游戏,我只使用鼠标作为输入。 如何使鼠标悬停在Texture2D对象上时,Texture2D和鼠标光标会发生变化,并且当单击纹理时,它会移动到另一个位置 简单地说,我想知道当我将鼠标悬停在或单击纹理2D时如何执行操作。在XNA中,您可以使用查询用户输入 最简单的方法是检查每一帧的鼠标状态并做出相应的反应。鼠标位置是否在某个区域内?显示不同的光标。在此画面中是否按下了右侧按钮?显示菜单。等等 var mouseState = Mouse.GetState(); 获取屏幕坐标中的鼠标位

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

简单地说,我想知道当我将鼠标悬停在或单击纹理2D时如何执行操作。

在XNA中,您可以使用查询用户输入

最简单的方法是检查每一帧的鼠标状态并做出相应的反应。鼠标位置是否在某个区域内?显示不同的光标。在此画面中是否按下了右侧按钮?显示菜单。等等

var mouseState = Mouse.GetState();
获取屏幕坐标中的鼠标位置(相对于左上角):

当鼠标位于特定区域内时更改纹理:

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。ButtonPush、ButtonPressed、ButtonRelease等。

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

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

这属于矩形。Contains获取一个点,因此我不确定为什么要将鼠标返回的点。GetState()转换为向量。但是我如何将单击与任何位置的纹理相关联。当我左键点击它在任何位置,而不是一个特定的矩形!Texture2D类没有用于接收输入的内置功能,这很好。因此,您必须始终定义活动区域,并将其与纹理或其他对象关联。如果你有更多的矩形,简单的循环通过它们,并用上面的方法检查每一个。这与原始问题有什么关系?这个答案与OP的问题关系不大,但对我有帮助!
if (Mouse.GetState().LeftButton == ButtonState.Pressed)
    {
        //Write code here
    }