GLFW 键盘输入注册为多次点击
GLFW Keyboard Input Registers As Multiple Clicks
在我当前的 LWJGL 应用程序中,我正在使用 GLFW window 输入处理程序,我已经设置了一个 class 来处理名为 Keyboard.java 的扩展 GLFWKeyCallback。我已经正确设置了我的键盘输入 class 但是当我点击一个键时如果我没有点击足够快(非常快)然后它注册为多次点击。我在下面提供了一些文档:
键盘Class
public class Keyboard extends GLFWKeyCallback {
//Variables
public static boolean keys[] = new boolean[65536];
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
keys[key] = action == GLFW_PRESS;
}
}
实施
public static void handleInput() {
if (Keyboard.keys[GLFW_KEY_SPACE]) {
System.out.println("Space");
glfwPollEvents();
}
}
上述方法在主游戏循环中实现,每帧调用一次。
结果
已初始化 LWJGL 版本:3.1.2 build 29
Space
Space
Space
Space
上面:每次点击space应该输出"Space",但是当我点击速度比较快的时候,就得到了上面很多"spaces"的结果。
结论:是否有可能space的点击无论按住多久都只注册一次。谢谢
在您的 handleInput()
函数中,您正在测试 Keyboard.keys[GLFW_KEY_SPACE]
是否为真,如果为真,则执行该语句。问题是,只有当您停止点击 space 时,此测试才会变为错误,这可能需要几秒钟才能发生。
我的建议:一旦你测试了Keyboard.keys[GLFW_KEY_SPACE]
,就把它设为假。
public static void handleInput() {
if (Keyboard.keys[GLFW_KEY_SPACE]) {
Keyboard.keys[GLFW_KEY_SPACE] = false;
System.out.println("Space");
glfwPollEvents();
}
}
在我当前的 LWJGL 应用程序中,我正在使用 GLFW window 输入处理程序,我已经设置了一个 class 来处理名为 Keyboard.java 的扩展 GLFWKeyCallback。我已经正确设置了我的键盘输入 class 但是当我点击一个键时如果我没有点击足够快(非常快)然后它注册为多次点击。我在下面提供了一些文档:
键盘Class
public class Keyboard extends GLFWKeyCallback {
//Variables
public static boolean keys[] = new boolean[65536];
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
keys[key] = action == GLFW_PRESS;
}
}
实施
public static void handleInput() {
if (Keyboard.keys[GLFW_KEY_SPACE]) {
System.out.println("Space");
glfwPollEvents();
}
}
上述方法在主游戏循环中实现,每帧调用一次。
结果
已初始化 LWJGL 版本:3.1.2 build 29
Space
Space
Space
Space
上面:每次点击space应该输出"Space",但是当我点击速度比较快的时候,就得到了上面很多"spaces"的结果。
结论:是否有可能space的点击无论按住多久都只注册一次。谢谢
在您的 handleInput()
函数中,您正在测试 Keyboard.keys[GLFW_KEY_SPACE]
是否为真,如果为真,则执行该语句。问题是,只有当您停止点击 space 时,此测试才会变为错误,这可能需要几秒钟才能发生。
我的建议:一旦你测试了Keyboard.keys[GLFW_KEY_SPACE]
,就把它设为假。
public static void handleInput() {
if (Keyboard.keys[GLFW_KEY_SPACE]) {
Keyboard.keys[GLFW_KEY_SPACE] = false;
System.out.println("Space");
glfwPollEvents();
}
}