2014-09-10 27 views
1

在我为我的OpenGL程序while循环我有一些像这样读一的KeyDown只有一次:在while循环(像的KeyListener在Swing)

 if (Keyboard.isKeyDown(Keyboard.KEY_W)) { 
    ... 
    } 

当然现在这个如果得到确认多个每次倍按钮按下。
有没有办法让它每按一次只检测一次按钮?
例如像Java Swing中的KeyListener一样。

我已经使用elapsedTime变量处理移动速度,也许我可以用它来解决这个问题呢?

+0

设置一个标志,当你第一次检测到按键,它们虽然如此,忽略了其他任何按键相同的类型,直到你发现钥匙释放... – MadProgrammer 2014-09-10 21:25:36

+0

嗯,这听起来像一个计划。 但是,如果我只想让if-code每次按下只执行一次,我该如何检查?因为while循环仍然继续,并且每秒运行60次,所以无论使用什么布尔值,在按下键时都会如此,从而执行代码。如果我将使用一段时间,它会阻止当时运行的其他代码。或者我错过了什么? – 2014-09-10 21:48:09

+1

您需要在呼叫之间保留一个标记以检查状态。如果您检测到该标志为真并且该键处于关闭状态,则可以忽略该标志,否则如果该标志为真且该键未关闭,则需要重置该标志。你只想运行逻辑,当标志是假的,关键是关闭 – MadProgrammer 2014-09-10 22:32:17

回答

0

继从我的问题MadProgrammers意见的指示,我得到这个工作:

if (Keyboard.isKeyDown(Keyboard.KEY_W)) { 
    if(wKeyUp==true) { 
     wKeyUp = false; 

     executeCode(); 
     } 
    } else if (wKeyUp == false && !Keyboard.isKeyDown(Keyboard.KEY_W)) 
     wKeyUp = true; 
1

第一次跟踪它何时回落,理想情况下,这个布尔值不是在每秒60次的方法的局部范围内定义的,而是在更高的范围内。

if (wKeyUp && Keyboard.isKeyDown(Keyboard.KEY_W)) { 
    wKeyUp = false; 
    onNewWKeyPress(); 
} 
else if (wKeyUp == false) 
{ 
    wKeyUp = true; 
} 
+0

我必须尝试一下,但我相信我明白了! – 2014-09-10 23:16:28

+0

其实我现在注意到这是不正确的。 你的意思是正确的,但代码是不正确的,我会发布我的代码,在一个单独的答案 – 2014-09-11 13:22:14