我正在尝试使用Jinput打印出鼠标位置:
public static void main(String[] args) { input = new InputManager(); while (true) { for (Mouse mouse : input.getMice()) { mouse.poll(); System.out.println("Mouse X: " + mouse.getX().getPollData()); System.out.println("Mouse Y: " + mouse.getY().getPollData()); System.out.println("---------"); } try { Thread.sleep(100); } catch (Exception e) { // DO NOTHING < BAD } } }
这是我的InputManager,它在初始化时扫描所有输入设备,并将所有鼠标分离到单独的列表中:
public class InputManager { public ArrayList<Mouse> mice; public InputManager() { mice = new ArrayList<Mouse>(); Controller[] inputs = ControllerEnvironment.getDefaultEnvironment() .getControllers(); for (int i = 0; i < inputs.length; i++) { Mouse mouse; if (inputs[i].getType() == Controller.Type.MOUSE) { mouse = (Mouse) inputs[i]; mice.add(mouse); } } System.out.println("Discovered " + mice.size() + " mice."); } public ArrayList<Mouse> getMice() { return mice; } }
x和y的打印信息始终为0。我在Windows 10上运行此程序,是否会引起任何问题?如何使用Jinput从鼠标获取鼠标数据?
JInput处于较低级别,您正在混淆窗口指针和鼠标。鼠标只是相对轴> 2的设备。每次轮询后或在每个事件中的值都不是像素数或位置,它仅是从其先前值开始的大致抽象单位的偏移量。对于相同的物理距离更改,某些鼠标报告较大的值,因此必须缩放它,这就是使用DirectX鼠标(也是相对轴设备)的游戏具有鼠标缩放滑块的原因。