在我当前的LWJGL应用程序中,我正在使用GLFW窗口输入处理程序,我已经设置了一个类来处理名为Keyboard.java的类,它扩展了GLFWKeyCallback。我已经正确设置了我的键盘输入类,但是当我单击一个键时,如果我没有点击足够快(非常快),那么它会注册为多次点击。我在下面提供了一些文档:
键盘类
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
空间
空间
空间
空间
上述:每次点击空格时都应输出“空格”,但是当我点击它相对较快时,我会得到许多“空格”的上述结果。
结论:无论您持有多长时间,只需点击一次空格即可。感谢
答案 0 :(得分:1)
在handleInput()
函数中,您正在测试Keyboard.keys[GLFW_KEY_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();
}
}