Answers:
通常,使用XNA时,您必须从事件驱动的代码范例转换为循环驱动的代码范例。您的更新代码每秒循环60次。因此,每次查看鼠标的状态,如果按钮按下并且指针在矩形内,则跳转到通常会放置在OnClick事件中的代码。
if(MouseLeftPress()){ DoSomething(); }
,这MouseLeftPress()
是您编写的用于比较当前和先前的左键鼠标状态的方法。我发现大多数情况下,这比实施事件要容易。
您需要自己实施。尝试查看位于以下位置的教程:http : //bluwiki.com/go/XNA_Tutorials/Mouse_Input
在XNA中检查鼠标单击的实际代码是这样的:
MouseState previousMouseState;
protected override void Initialize()
{
// TODO: Add your initialization logic here
//store the current state of the mouse
previousMouseState = Mouse.GetState();
}
protected override void Update(GameTime gameTime)
{
// .. other update code
//is there a mouse click?
//A mouse click occurs if the goes from a released state
//in the previous frame to a pressed state
//in the current frame
if (previousMouseState.LeftButton == ButtonState.Released
&& Mouse.GetState().LeftButton == ButtonState.Pressed)
{
//do your mouse click response...
}
//save the current mouse state for the next frame
// the current
previousMouseState = Mouse.GetState();
base.Update(gameTime);
}
如果您的游戏是3D游戏,则可以实现挑选,详情如下:http : //create.msdn.com/en-US/education/catalog/sample/picking_triangle。基本上,这会创建一条从相机到鼠标单击的光线(其中没有一点矩阵投影在其中),然后检查是否有任何物体与该光线相交。
如果您的游戏是2D,则应该能够轻松地将窗口坐标转换为游戏坐标。然后检查所选坐标是否在任何对象的范围内。
查看鼠标是否被单击的最简单方法是
//Create this variable
MouseState mouseState;
现在在更新方法中添加此
mouseState = Mouse.GetState();
if (mouse.RightButton == ButtonState.Pressed)
{
//Do Stuff
}
希望这有所帮助