使用 learnopengl.com 开发小型引擎,但过了一段时间,我仍然无法找出处理输入的最佳方法。
当然,我可以按照指南并使用它们的功能:
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}
但是,我正在寻找一种更简单的方法:
if(key_a.isPressed)
{
...
}
另一个挑战是能够在类的不同区域使用该代码,而不是将所有输入都推入该 key_callback 函数。
我对C++相当陌生,也许只有几个月的经验,但我绝对不陌生
您可以使用 glfwGetKey 来获取特定按键的状态。
int state = glfwGetKey(window, GLFW_KEY_A);
这是我过去如何做到这一点的一个例子。
int main(){
...
glfwSetKeyCallback(glfwWindow, Input::KeyCallback);
Input::IsPressed(GLFW_KEY_ESCAPE)
...
}
class Input {
private:
static std::vector<int> Input::m_pressed(400,0);
public:
static void Input::KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
Input::m_pressed[key] = action;
}
static bool Input::IsPressed(int key)
{
return (bool)Input::m_pressed[key];
}
}