これはGLFWに関する初心者の質問かもしれませんが、面白い問題があるようです。ですから、私はGLFWを使って簡単な入力処理クラスを開発しています。具体的には静的メソッドを利用して、メソッドを使用するヘッダーファイルのインクルードを必要とするだけです。だから、これは私のコードで、これまで...GLFWの入力処理が意図したとおりに機能しない
InputHandler.cpp
#include "InputHandler.h"
GLFWwindow *Input::m_Window;
bool Input::isDown;
std::vector<int> Input::keyCache;
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
for (int _key = 0; _key < Input::keyCache.size(); _key++)
{
if (key == Input::keyCache[_key] && action == GLFW_PRESS || key == Input::keyCache[_key] && action == GLFW_REPEAT)
Input::isDown = true;
else
Input::isDown = false;
}
}
void Input::processInput(GLFWwindow* window)
{
m_Window = window;
}
bool Input::isKeyDown(int key)
{
keyCache.push_back(key);
glfwSetKeyCallback(m_Window, key_callback);
return isDown;
}
InputHandler.h
#pragma once
#include <GLFW\glfw3.h>
#include <vector>
class Input
{
public:
static bool isDown;
static std::vector<int> keyCache;
private:
static GLFWwindow *m_Window;
public:
static void processInput(GLFWwindow* window);
static bool isKeyDown(int key);
static bool isKeyUp(int key);
static int getMouseX();
static int getMouseY();
};
しかし、私は、trueまたはベースfalseを返しますisKeyDownメソッドを呼び出したときにキーが押されていない場合、複数回、プログラムは最後に述べたキーにしか反応しないようです。私は、コードを使用している場合たとえば、...
if (Input::isKeyDown(GLFW_KEY_W) || Input::isKeyDown(GLFW_KEY_Q))
std::cout << "Key is down" << std::endl;
のみQキーは文をトリガする、Wは何もしません。私はGLFWのサイトを何度も訪れました。入力ガイドは入力を受け取るために必要なことを学んだ場所で、何も探していないので誰もこの問題を抱えていないようです。誰かが助けることができた場合、可能な問題を説明するか、自分自身で答えを見つけるという観点から私を正しい方向に向けることによって、私は非常に感謝しています!
WとQの両方がキャッシュにあり、Wだけが押されているとき、key_callbackはどう思いますか?答え:isDownをtrueに設定し、isDownをfalseに設定してから、それを返します。その場合、isDownはfalseです。 – immibis
ええ、それは今私にとって理にかなっています。私はおそらく前にそれを理解していたはずですが、私はそれが遅れていると私は疲れていることを自分自身に伝えます。 @immibisに応答する時間をとっていただきありがとうございます – Devurauxe