1

LWJGL アプリケーションを作成していますが、Keyboard クラスと Mouse クラスを機能させるのに問題があります。mouseWheelMoved、keyPressed、および keyReleased メソッドは呼び出されません。listener.update メソッドが呼び出されていることを確認できます。

このアプリケーションでは、ディスプレイを JFrame 内に埋め込んでいますが、そうしない場合でもまだ機能していないため、問題ではないようです。

コンソール出力:

ドリュー マップ
キーボードとマウスのリスナーが初期化
されました (ここで数分間キーを押します)
アプリケーションの終了 要求された
アプリケーションの終了
レンダラーの停止
レンダラーの終了


レンダラーの初期化:

@Override
public void run() {
    try {
        Display.setParent(canvas);
        Display.create();
        Display.setResizable(false);
        Display.setTitle("Display");
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glOrtho(0, 1, 0, 1, 0, 1);
        draw();
        listener.initialize();
    } catch (LWJGLException ex) {
        System.out.println("Could not initialize renderer: " + ex.getMessage());
        Thread.currentThread().interrupt();
    }
    do {
        listener.update();
        if(shouldUpdate)
            draw();
        Thread.yield();
    } while(!closing);
    System.out.println("Renderer Stopping");
    try {
        Display.destroy();
    } catch(Exception ex) {
        System.out.println("Error while stopping renderer: " + ex.getMessage());
    }
    listener.destroy();
    System.out.println("Renderer End");
}


リスナー クラス:

public void initialize() {
    try {
        Mouse.create();
        Keyboard.create();
        Keyboard.enableRepeatEvents(true);
        System.out.println("Keyboard & Mouse listener initialized");
    } catch (LWJGLException ex) {
        System.out.println("Could not initialize listener");
        Thread.currentThread().interrupt();
    }
}
public void update() {
    while(Keyboard.next()) { // Never True
        int key = Keyboard.getEventKey();
        if(Keyboard.getEventKeyState())
            keyPressed(key); // Never Called
        else
            keyReleased(key); // Never Called
        System.out.println(Keyboard.getKeyName(key)); // Never Printed
    }
    int amount = Mouse.getDWheel(); // Always 0
    if(amount != 0)
        mouseWheelMoved(amount); // Never Called
}
4

1 に答える 1