2017-08-15 34 views
0

在我当前的LWJGL应用程序中,我使用了GLFW窗口输入处理程序,我已经建立了一个名为Keyboard.java的类来处理扩展GLFWKeyCallback。我已经正确设置了我的键盘输入类,但是当我点击某个键时,如果我不点击(如果速度够快),那么它会注册为多次点击。我已经提出下面的一些文档:GLFW键盘输入寄存器作为多个点击

键盘类

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建立29

空间

空间

空间

空间

以上:“S每当我点击空间时应该输出“节奏”,但是当我点击它时比较快,然后我得到了许多“空间”的上述结果。

结论:无论您持有多久,点击空间是否可以仅注册一次?谢谢

回答

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(); 
    } 
} 
+0

感谢您的回复,但我已经设法解决这个问题。然而,这是一个更容易的方法。谢谢。 –