我尝试为游戏中的一些文本字段实现简单的 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(...) 来设置回调。
这是预期的行为。 glfwSetCharCallback 的文档说(强调我的):
字符回调的行为与系统文本输入通常的行为相同,并且但是,它还指出您可以使用如果按住修饰键会阻止该平台上的正常文本输入,则不会被调用,例如 OS X 上的 Super(Command)键或 Windows 上的 Alt 键。有一个带有修饰符回调的角色接收这些事件。
char mods 回调,即使按下修饰键也会调用该回调。
该函数设置指定窗口的带有修饰符的字符回调,无论使用什么修饰键,当输入 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);