glfwSetKeyCallback関数で基本的なカメラの動きを作成しようとしています。問題は、WやAのように、一度に複数のキーを入力するのを処理しないということです。代わりに、最後に入力されたキーについてのみ知っているように機能します。それで、Aを押して左に移動すると、左に移動し、次にWを押して斜め左上に移動すると、Aが押されて上に行くことを忘れてしまいます。GLFWで一度に複数のキー入力を処理する
float cameraSpeed = 0.02f;
if (key == GLFW_KEY_ESCAPE && (action == GLFW_PRESS || action == GLFW_REPEAT))
glfwSetWindowShouldClose(window, GLFW_TRUE);
if (key == GLFW_KEY_W && (action == GLFW_PRESS || action == GLFW_REPEAT))
Game::GetInstance()->cameraY += cameraSpeed;
if (key == GLFW_KEY_A && (action == GLFW_PRESS || action == GLFW_REPEAT))
Game::GetInstance()->cameraX -= cameraSpeed;
if (key == GLFW_KEY_S && (action == GLFW_PRESS || action == GLFW_REPEAT))
Game::GetInstance()->cameraY -= cameraSpeed;
if (key == GLFW_KEY_D && (action == GLFW_PRESS || action == GLFW_REPEAT))
Game::GetInstance()->cameraX += cameraSpeed;
私の心に入った一つの解決策は、キーボード入力の私自身のブールタブを作成し、それらを設定するだけGLFW機能を使用し、などのようなものだった:
if (key == GLFW_KEY_A && action == GLFW_PRESS)
// set 'A' to true;
if (key == GLFW_KEY_A && action == GLFW_RELEASE)
// set 'A' to false;
そして私がやりたいですそれは完全に別個の関数/クラス/何でも。それは私にはきれいに見えません。問題の良い解決策は何ですか?
あなたは 'GLFW_PRESS'と' GLFW_RELEASE'を扱うのに特に問題はありますか? – VTT
いいえ、複数のキーが押されるまで、正常に動作します。 2つのキーが押されている場合(WとAをもう一度言いましょう)、左上に移動する必要があります(キーは常に押されてGLFW_REPEATなので)。最後に押されたキーだけが記憶されます。 – Dnoren
最初のキーに 'GLFW_RELEASE'を受け取っていないと言っていますか? – VTT