20220728160 の変更点

20220728160 の変更点


#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
pitan_prof.png
プログラミングや音MADやらが趣味

最新のページ

最新の5件
2024-06-26 2024-05-29 2024-05-14 2024-05-08 2024-04-25

[もっと見る]

タグ

[もっと見る]

人気のページ

人気の5件

カウンター

合計: 79
今日: 1
昨日: 0
オンライン: 9
  編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS