|
投稿日: 2022-07-28 (木)
|
次はキー、マウス入力となります。
// キーが押されているか
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が返されると押されているということになるみたいですね。
// マウスが押されているか
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へ最後に押されたキーを保存する処理を追加します。
// マウスカーソルの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関数がマウスカーソルの位置を書き込むみたいですね。
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();
}
}
コメントはありません。 Comments/20220728160
キーワード: 描画ライブラリ, アプリ開発, アプリケーション, 描画処理, グラフィック
| Pitan |
![]() |
| プログラミングや音MADやらが趣味 |
| Table of Contents |
[もっと見る]
[もっと見る]