c++ - 使用 GLFW 处理输入

标签 c++ opengl input glfw

这是我用来检查 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 { }

最佳答案

Rollover是允许键盘一次正确注册多个按键的属性。键盘按行和列连接。即使键盘不是正方形的,各个键也位于连接其开关的大致正方形矩阵中。 Controller 连接一行,然后进行测试以查看命中了哪些列。一些组合键“遮蔽”其他组合键。 Controller 可以判断输入何时不明确并且不发送任何键。

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

关于c++ - 使用 GLFW 处理输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21057312/

相关文章:

c++ - OpenGL 变换矩阵顺序是倒序的

opengl - 为什么我必须 "use"着色器程序才能设置它的制服?

android - 如何在 Android 中创建一个标签为 "@"的按钮?

c++ - 我的 CIN 命令完全跳过输入?我什么都试过了

c++ - 他们是如何编写 MSVC++ Debugger 的?

c++ - v4l2 很简单的例子

OpenGL:旧 ATI 卡上的 "Fragment Shader not supported by HW"

java - 提示输入数组大小

c++ - 前向 boost::从访问者到另一个访问者的变体

c++ - 带有 std::quoted 的 Visual Studio 中的错误