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
}