GLFW(LWJGL)输入 - 按住CTRL键可以阻止CharCallback

时间:2016-03-23 12:03:55

标签: java input keyboard lwjgl glfw

我尝试为游戏中的一些文本字段实现一个简单的CTRL + V.因此,无论何时按下或释放ctrl,我都会在KeyCallback中为CTRL设置一个标志(我测试了这个)。当我尝试键入" V"现在CharCallback没有被调用。是不是应该这样工作?如果是我该怎么做呢?

我在KeyCallback中如何轮询它:

if(key == GLFW_KEY_LEFT_CONTROL && action == GLFW_PRESS) {
    controlPressed = true;
}
if(key == GLFW_KEY_LEFT_CONTROL && action == GLFW_RELEASE) {
    controlPressed = false;
}

我使用glfwSetKeyCallback(...)来设置回调。

1 个答案:

答案 0 :(得分:1)

这是预期的行为。 documentation for glfwSetCharCallback说(强调我的):

  

字符回调的行为与系统文本输入正常相同,如果按住修改键可以阻止上的正常文本输入,则不会调用,例如超级(命令)键Windows上的OS X或Alt键。有一个带有修饰符回调的字符可以接收这些事件。

但是,它还声明您可以使用char mods callback,即使按下修饰键也会调用它。

  

此函数使用指定窗口的修饰符回调设置字符,无论使用何种修饰键,都会在输入Unicode字符时调用该字符。

例如:

GLFWCharModsCallback charModsCallback = new GLFWCharModsCallback() {
    @Override
    public void invoke(long window, int codepoint, int mods) {
        // do something with the character and modifier flags
    }
};
glfwSetCharModsCallback(window, charModsCallback);