#author("2024-01-06T11:48:52+09:00","default:pitablog","pitablog") #author("2024-01-06T11:49:03+09:00","default:pitablog","pitablog") #include(include/oldblog,notitle) CENTER:&ref(https://blog.pitan76.net/wp-content/uploads/2022/07/LWJGL32.png); ---- * 【LWJGL3】キー、マウス入力 #2 [#title] #splitbody{{ LEFT: &tag(情報技術,プログラミング,Java,LWJGL,LWJGL3); #split RIGHT:&size(13){投稿日: 2022-07-28 (木)}; }} #bcontents 次はキー、マウス入力となります。 * キーの入力 [#qe0e6601] // キーが押されているか public boolean isKeyDown(int key) { return GLFW.glfwGetKey(window, key) == 1; } // キーが押されたか public boolean isKeyPressed(int key) { return isKeyDown(key) && !lastKeys[key]; } // キーが離されたか public boolean isKeyReleased(int key) { return !isKeyDown(key) && lastKeys[key]; } 上記のコードをWindowクラスに追加してください。 GLFW.glfwGetKeyでは引数に指定されたキーが押されているか確認できます。1が返されると押されているということになるみたいですね。 * マウスの入力 [#y241ccbb] // マウスが押されているか public boolean isMouseDown(int button) { return GLFW.glfwGetMouseButton(window, button) == 1; } // マウスが押されたか public boolean isMousePressed(int button) { return isMouseDown(button) && !lastMouseButtons[button]; } // マウスが離されたか public boolean isMouseReleased(int button) { return !isMouseDown(button) && lastMouseButtons[button]; } こちらもWindowクラスに付け足してください。 上の項目の仕様と同じみたいです。 // 最後に押されたキー public boolean[] lastKeys = new boolean[GLFW.GLFW_KEY_LAST]; // 最後に押されたマウスボタン public boolean[] lastMouseButtons = new boolean[GLFW.GLFW_MOUSE_BUTTON_LAST]; 上記の配列は上らへんに追記しておいてください。 これがないと最後に押されたキーを記録できません。 public void update() { for (int i = 0; i < GLFW.GLFW_KEY_LAST; i++) lastKeys[i] = isKeyDown(i); for (int i = 0; i < GLFW.GLFW_MOUSE_BUTTON_LAST; i++) lastMouseButtons[i] = isMouseDown(i); // マウスなど入力されたイベントを記録する GLFW.glfwPollEvents(); } update関数にlastKeys, lastMouseButtonsへ最後に押されたキーを保存する処理を追加します。 * マウスカーソルの座標 [#w512fc1e] // マウスカーソルのX座標を取得 public double getMouseX() { DoubleBuffer buffer = BufferUtils.createDoubleBuffer(1); GLFW.glfwGetCursorPos(window, buffer, null); return buffer.get(0); } // マウスカーソルのY座標を取得 public double getMouseY() { DoubleBuffer buffer = BufferUtils.createDoubleBuffer(1); GLFW.glfwGetCursorPos(window, null, buffer); return buffer.get(0); } ※DoubleBufferはダブルバッファリングではありません。 Double型のバッファにglfwGetCursorPos関数がマウスカーソルの位置を書き込むみたいですね。 * 動作確認 [#b093801d] public static void main(String[] args) { Window window = new Window(); // ウィンドウの初期化 window.init(); // 閉じるまでループ while (!window.isClosed()) { // イベントの更新 window.update(); if (window.isKeyPressed(GLFW.GLFW_KEY_A)) { System.out.println("Pressed A"); } if (window.isKeyReleased(GLFW.GLFW_KEY_A)) { System.out.println("Released A"); } if (window.isMousePressed(GLFW.GLFW_MOUSE_BUTTON_LEFT)) { System.out.println("Pressed Left"); System.out.println("CursorPos: (" + window.getMouseX() + ", " + window.getMouseY() + ")"); } if (window.isMouseReleased(GLFW.GLFW_MOUSE_BUTTON_LEFT)) { System.out.println("Released Left"); } // バッファの更新 window.swapBuffers(); } } &ref(https://blog.pitan76.net/wp-content/uploads/2022/07/Pasted-18.png,); ** コメント [#comment] #pctrlcmt &size(10){キーワード: 描画ライブラリ, アプリ開発, アプリケーション, 描画処理, グラフィック};
Pitan |
![]() |
プログラミングや音MADやらが趣味 |
[もっと見る]
[もっと見る]