我有一个2D游戏,其中只使用鼠标作为输入。 我该如何做到这一点,以便当鼠标悬停在Texture2D对象上,Texture2D和鼠标光标发生变化时,以及当纹理被点击时,它会移动到另一个位置。2D XNA游戏鼠标点击
简而言之,我想知道当我将鼠标悬停或点击一个Texture2D时如何做某些事情。
我有一个2D游戏,其中只使用鼠标作为输入。 我该如何做到这一点,以便当鼠标悬停在Texture2D对象上,Texture2D和鼠标光标发生变化时,以及当纹理被点击时,它会移动到另一个位置。2D XNA游戏鼠标点击
简而言之,我想知道当我将鼠标悬停或点击一个Texture2D时如何做某些事情。
在XNA中,您可以使用Mouse class来查询用户输入。
这样做最简单的方法是检查每个帧的鼠标状态并作出相应的反应。鼠标位于某个区域内吗?显示不同的光标。在此框架中按下右按钮?显示一个菜单。等
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。 ButtonPush,ButtonPressed,ButtonRelease等
Rectangle.Contains需要一个点,所以我不知道为什么你将Mouse.GetState()返回的Point转换为Vector。 – ClassicThunder 2012-03-15 15:32:42
非常感谢,lucius – 2012-03-16 21:46:52
但是我怎么能在任何位置关联点击和纹理。 当我离开的时候点击了它的任何位置都不是特定的矩形! – 2012-03-16 22:01:09
我只想补充一点,鼠标单击代码可以简化,使您不必为此做出一个变量:
if (Mouse.GetState().LeftButton == ButtonState.Pressed)
{
//Write code here
}
这与原始问题有什么关系? – jeteon 2016-03-04 14:32:18
这属于在http ://gamedev.stackexchange.com/ – RQDQ 2012-03-15 12:09:06