使用XNA执行鼠标、键盘单击

本文关键字:键盘 单击 鼠标 XNA 执行 使用 | 更新日期: 2023-09-27 18:02:01

我想知道如何执行,例如鼠标右键单击,或按ENTER与XNA,是可能的吗?我希望XNA程序执行操作,而不是检查我是否单击了它。谢谢。

使用XNA执行鼠标、键盘单击

您可以使用以下命令使鼠标光标可见(如果有必要的话):

protected override void Initialize()
{
   // Make mouse visible
   this.IsMouseVisible = true;
   base.Initialize();
}

创建以下变量,这样就可以保存当前和以前的mouseState:

MouseState mouseStateCurrent, mouseStatePrevious;

在Update函数中可以使用以下命令:

protected override void Update(GameTime gameTime)
{
    // Allows the game to exit
    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
    {
        this.Exit();
    }
    // Get current mouseState
    mouseStateCurrent = Mouse.GetState();
    // Left MouseClick
    if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
    {
        // TODO when left mousebutton clicked
    }
    // Right MouseClick
    if (mouseStateCurrent.RightButton == ButtonState.Pressed && mouseStatePrevious.RightButton == ButtonState.Released)
    {
        //TODO when right mousebutton clicked
    }
    mouseStatePrevious = mouseStateCurrent;

    // Update
    base.Update(gameTime);
}

希望这对你有用!

调用点击会调用的函数

当用户点击时调用leftClick,但你可以随时调用这个函数

edit:如果你想自己调用mouseClick(而不是leftClick),你可以做的另一件事是让你自己的变量发送进来,并为你想要定义的不同状态有一个enum。

enum CLICKS{left=0, right, middle);
public void mouseClick(){
  mouseClick(-1);
}
public void mouseClick(int manualClick){
  if(mouseStateCurrent.LeftButton == ButtonState.Pressed || manualClick == CLICKS.left)
    leftClick();
}
public void leftClick(){
  //do stuff
}
public void randomFunction(){
  //doing stuff
  mouseClick(CLICKS.left); //<-- will simulate a left click
}

如果你想模拟真实的鼠标按压,你可以使用SendInput Win32方法。

这并不像这里所提供的技术那么简单,但游戏将无法区分这些点击是来自真实用户的点击还是模拟用户的点击。

还可以查看讨论相同问题的StackOverflow问题