C++ 用GLFW处理输入

C++ 用GLFW处理输入,c++,opengl,input,glfw,C++,Opengl,Input,Glfw,这是我用来检查2D基本游戏用户输入的键盘回调方法的定义。但是,我在处理某些同时按下的按键时遇到了问题 例如,如果我按住向右箭头键和向上箭头键,则播放器将按应有的方向向屏幕右上角移动45度。然后,在按住向上键和向右键的同时,如果我按空格键(发射炮弹),也可以 但是,如果我按住左箭头键和下箭头键,播放器将按其应该的方式移动,但是当我按下空格键时,我没有收到任何输入响应,因此在向下和向左移动时,我无法发射炮弹。所有其他移动+射击组合都有效,只是左下角不起作用。。。我不明白为什么。有什么想法吗 if (

这是我用来检查2D基本游戏用户输入的键盘回调方法的定义。但是,我在处理某些同时按下的按键时遇到了问题

例如,如果我按住向右箭头键和向上箭头键,则播放器将按应有的方向向屏幕右上角移动45度。然后,在按住向上键和向右键的同时,如果我按空格键(发射炮弹),也可以

但是,如果我按住左箭头键和下箭头键,播放器将按其应该的方式移动,但是当我按下空格键时,我没有收到任何输入响应,因此在向下和向左移动时,我无法发射炮弹。所有其他移动+射击组合都有效,只是左下角不起作用。。。我不明白为什么。有什么想法吗

if (key == GLFW_KEY_LEFT)
{
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_LEFT, action);
}
else if (key == GLFW_KEY_RIGHT)
{
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_RIGHT, action);
}
else if (key == GLFW_KEY_UP)
{
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_UP, action);
}
else if (key == GLFW_KEY_DOWN)
{
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_DOWN, action);
}
else if (key == GLFW_KEY_SPACE)
{
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_SPACE, action);
}
else { }
听起来像是一场灾难

你可能得去争取

或者使用不同的按键组合。

是允许键盘同时正确注册多个按键的属性。键盘是按行和列连接的。即使键盘不是方形的,各个键也在连接开关的大致方形的导线矩阵中。控制器连接一行,然后进行测试以查看哪些列被命中。有些组合键会“遮蔽”其他组合键。当输入不明确时,控制器可以辨别,并且不发送任何键

更好的键盘使用二极管来避免歧义,从而支持“完全翻转”,尽管实际上USB限制您一次只能使用所有修改器和6个不同的按键代码。

代码应该是

if (key == GLFW_KEY_LEFT)
{
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_LEFT, action);
}

if (key == GLFW_KEY_RIGHT)
{
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_RIGHT, action);
}

if (key == GLFW_KEY_UP)
{
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_UP, action);
}

if (key == GLFW_KEY_DOWN)
{
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_DOWN, action);
}

if (key == GLFW_KEY_SPACE)
{
    GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_SPACE, action);
}
问题是您的代码一次只检测到一次按键,因此当您同时按下左键和右键时,只有(key==GLFW\u key\u left)被触发时才会触发