如何按下KeyEvent一次?

时间:2015-07-28 13:46:32

标签: java keyevent

我试图以一定的速度射击导弹,但是目前你可以简单地按住火箭按钮(太空)并且它将制造连续的导弹线。

我认为这是因为当你按住KeyEvent时,只要你按住它时触发一次,就会触发public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if (key == KeyEvent.VK_SPACE) { fire(); } if (key == KeyEvent.VK_A) { dx = -1; } if (key == KeyEvent.VK_D) { dx = 1; } } public void keyReleased(KeyEvent e) { int key = e.getKeyCode(); if (key == KeyEvent.VK_SPACE) { } if (key == KeyEvent.VK_A) { dx = 0; } if (key == KeyEvent.VK_D) { dx = 0; } }

如何只按下按钮一次,如何检测按下按钮?

 function selectText(containerid) {
        if (document.selection) {
            var range = document.body.createTextRange();
            range.moveToElementText(document.getElementById(containerid));
            range.select();
        } else if (window.getSelection) {
            var range = document.createRange();
            range.selectNode(document.getElementById(containerid));
            window.getSelection().addRange(range);
        }
    }

1 个答案:

答案 0 :(得分:2)

只需添加一张支票,确保在重新开火之前已经释放了钥匙。我使用AtomicBoolean来确保不同事件被解雇时没有多线程问题。

private final AtomicBoolean canShoot = new AtomicBoolean(true);

public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();

    if (key == KeyEvent.VK_SPACE) {
        if (canShoot.compareAndSet(true, false)) {
            fire();
        }
    }
    // snip
}

public void keyReleased(KeyEvent e) {
    int key = e.getKeyCode();

    if (key == KeyEvent.VK_SPACE) {
        canShoot.set(true);
    }
    // snip
}