1

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を使用してマウスからマウスデータを取得するにはどうすればよいですか?

4

2 に答える 2

0

JInput は下位レベルです。ウィンドウ ポインターとマウスを混同しています。マウスは、相対軸が 2 つを超える単なるデバイスです。各ポーリングの後の値または各イベントの値は、ピクセル数や位置ではなく、前の値からの大まかな抽象的な単位でのオフセットにすぎません。一部のマウスは、同じ量の物理的距離の変更に対してより大きな値を報告するため、それをスケーリングする必要があります。これが、directx マウス (相対軸デバイスでもある) を使用するゲームにマウス スケール スライダーがある理由です。

于 2015-10-14T21:16:53.970 に答える