在 GLFW 中处理小型引擎的输入

问题描述 投票:0回答:2

使用 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++相当陌生,也许只有几个月的经验,但我绝对不陌生

c++ opengl input glfw glew
2个回答
1
投票

您可以使用 glfwGetKey 来获取特定按键的状态。

int state = glfwGetKey(window, GLFW_KEY_A);

0
投票

这是我过去如何做到这一点的一个例子。

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];
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.