我尝试为游戏中的一些文本字段实现一个简单的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(...)来设置回调。
答案 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);