繁体   English   中英

如何按下KeyEvent一次?

[英]How do I the KeyEvent only once when it is held down?

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

我相信这是因为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;
    }
}

只需添加一张支票,确保在释放钥匙之前释放钥匙。 我使用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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM