Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java读取原始鼠标输入_Java_Input_Mouseevent_Mouse - Fatal编程技术网

Java读取原始鼠标输入

Java读取原始鼠标输入,java,input,mouseevent,mouse,Java,Input,Mouseevent,Mouse,我正在寻找一种在Java中读取原始鼠标输入的方法,而不仅仅是事件监听器。我会告诉你我在做什么。本质上,有一个游戏,如果你把鼠标移到右边,我希望Java发送按下“d”键的按键信号,当鼠标移到左边时,按下“a”键。但是,当你移动鼠标时,游戏会迅速修正鼠标位置,并将其发送回屏幕中央。因此,如果您使用鼠标侦听器,您会看到鼠标向右移动的一个事件,然后鼠标的另一个快速跟随事件会移回左侧。我想知道我是否可以从鼠标中获得数据,而不需要在位置上进行这些修正。谢谢 一点代码可能会让情况更清楚,但下面是您可以做的 虽

我正在寻找一种在Java中读取原始鼠标输入的方法,而不仅仅是事件监听器。我会告诉你我在做什么。本质上,有一个游戏,如果你把鼠标移到右边,我希望Java发送按下“d”键的按键信号,当鼠标移到左边时,按下“a”键。但是,当你移动鼠标时,游戏会迅速修正鼠标位置,并将其发送回屏幕中央。因此,如果您使用鼠标侦听器,您会看到鼠标向右移动的一个事件,然后鼠标的另一个快速跟随事件会移回左侧。我想知道我是否可以从鼠标中获得数据,而不需要在位置上进行这些修正。谢谢

一点代码可能会让情况更清楚,但下面是您可以做的

虽然有许多API(例如LWJGL的鼠标界面)允许您直接轮询鼠标位置,但在您的情况下,这听起来像是编程过度。首先,保留一个私有字段,该字段引用最后一个鼠标位置。我们在这里称之为
x

使用MouseMotionListener,让它从
mouseMoved
mouseDragged
调用相同的方法。这个方法应该是这样的

void controlMethod(MouseEvent event) {
    int newX = event.getXOnScreen();
    int dx = this.x - newX;
    if(dx > 0) **D Key Event**
    else if(dx < 0) ***A Key Event**

    x = newX;
}
void控制方法(MouseEvent事件){
int newX=event.getXOnScreen();
int dx=this.x-newX;
如果(dx>0)**D键事件**
否则,如果(dx<0)***为关键事件**
x=newX;
}
这应该能帮你完成任务。你唯一需要注意的是鼠标偏离了MouseMotionListener的区域;但这样的事情总有解决的办法,而且似乎有点相切

最后,请注意,如果在游戏循环开始时出现鼠标控制的疯狂摆动,请考虑将类字段<代码> x>代码>设置为<代码>可选<代码>,并使用<代码>可选。这也将保护您免受数据无效(例如焦点丢失)的影响,我建议您将其作为一种实践


祝你好运

我要说的是,我不是在玩这个游戏。游戏是CSGO,这就是将鼠标位置修改回屏幕中心的原因。如果这有任何意义的话:)这确实改变了一些事情。所以,你真的需要一个MouseMotionListener以外的东西。我建议查看LWJGLAPI以及JInput;任何一个都应该能够轮询鼠标的绝对位置。我不确定CSGO将鼠标光标向后拉的速度有多快,因此我的建议到此为止,但这可能是您最好的选择。