有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在KeyEvent之后发生多个事件。出现了VK_空间

不知道为什么。我的方法运行多次并打印字符串“Fire!!!” 它应该只在事件发生后运行一次

球员级别

@Override
public void keyPressed(KeyEvent e) {
    switch (e.getKeyCode()){
    case KeyEvent.VK_SPACE:{
        Missilies m = new Missilies(x,y);
        //m.fire();
        if(!m.isFired()) {
            m.fire();
            m.setFired(true); 
        }

   public void keyReleased(KeyEvent e) {
    switch (e.getKeyCode()){

    case KeyEvent.VK_SPACE:{
        m.setFired(false);
    }

导弹级

public  void fire(){
    System.out.println("Fire !!!");

 }

现在这似乎奏效了:

 @Override
public void keyPressed(KeyEvent e) {
    switch (e.getKeyCode()){
    case KeyEvent.VK_SPACE:{
        Missilies m = new Missilies(x,y);
        if (lastKey == null || lastKey != e.getKeyChar()) {
            lastKey = e.getKeyChar();
            m.fire();
            System.out.println("keyPressed: " + lastKey);
        }

共 (1) 个答案

  1. # 1 楼答案

    看看this

    keyPressed()只要按住键,就会持续触发。你可以将代码放入keyReleased(),但是如果玩家在放开钥匙时发射导弹,玩家可能会感到奇怪。最好是进行某种检查,确保每次事件只触发一次

    boolean fired;
    
    @Override
    public void keyPressed(KeyEvent e) {
        switch (e.getKeyCode()) {
        case KeyEvent.VK_SPACE:{
            m = new Missilies(x,y);
            if(!fired) {
                m.fire();
                fired = true;
            }
            break;
    }
    
    @Override
    public void keyRelased(KeyEvent e) {
        fired = false;
    }