如何在按下键盘按钮而不是循环时执行一个操作

时间:2015-01-24 01:28:18

标签: java button keyboard lwjgl

    if(Keyboard.isKeyDown(Keyboard.KEY_I)) {
        if(ms != MenubarState.INVENTORY) ms = MenubarState.INVENTORY;
        else ms = MenubarState.CLOSED;
    }

此位在每次渲染时运行,因此显然将在按下按钮时进行检查。我希望能够按一次,然后只执行一次,直到我把手指关闭然后再按一次。

这是怎么做到的?我在java编程。

3 个答案:

答案 0 :(得分:2)

你可以记住你是否执行了这个动作:

boolean done = false;
if(Keyboard.isKeyDown(Keyboard.KEY_I)) {
    if(!done){
       if(ms != MenubarState.INVENTORY) ms = MenubarState.INVENTORY;
       else ms = MenubarState.CLOSED;
       done= true;
    }
}
else done= false;

答案 1 :(得分:1)

我建议你看看这些: http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html https://en.wikipedia.org/wiki/Observer_pattern

您可以创建一个实现Keylisterner接口的类并扩展Observable类。您可以让您的类在其中使用渲染循环实现Observer接口。如果使渲染类成为keylistener类的观察者,则可以让keylistener调用包含以下内容的方法:

if(ms != MenubarState.INVENTORY) ms = MenubarState.INVENTORY;
    else ms = MenubarState.CLOSED;

按下正确的键时恰好一次。

答案 2 :(得分:1)

LWJGL附带一个Keyboard.getEventKeyState();如果按下该键,则为true,否则为false。

if(Keyboard.isKeyDown(Keyboard.KEY_I)) {
    if(Keyboard.getEventKeyState())
        ms = MenubarState.INVENTORY;
    else ms = MenubarState.CLOSED;
}

这样做是检查按键是否被按下。如果不是,则菜单栏将关闭。