有 Java 编程相关的问题?

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

keylistener Java:每次只识别一次按键

我正在用Java制作一个游戏,我希望能够走到NPC面前,按空格键与他们交谈。然而,我现在的键盘课程是针对移动键(wasd和上下左右)的,它总是识别按键以保持玩家移动。我该如何设置它,使空格键只在按下后才能被识别,直到玩家松开并再次按下它才能被识别

public class Keyboard implements KeyListener
{

    private boolean[] keys = new boolean[120];

    public boolean up, down, left, right, interact;

    public void update() 
    {
        up = keys[KeyEvent.VK_UP] || keys[KeyEvent.VK_W];
        down = keys[KeyEvent.VK_DOWN] || keys[KeyEvent.VK_S];
        left = keys[KeyEvent.VK_LEFT] || keys[KeyEvent.VK_A];
        right = keys[KeyEvent.VK_RIGHT] || keys[KeyEvent.VK_D];
        interact = keys[KeyEvent.VK_SPACE];
    }

    public void keyPressed(KeyEvent e) 
    {
        keys[e.getKeyCode()] = true;
    }

    public void keyReleased(KeyEvent e) 
    {
        keys[e.getKeyCode()] = false;
    }
}

共 (1) 个答案

  1. # 1 楼答案

    Set<Integer> pressedKeys = new TreeSet<Integer>();
    
    public void keyPressed(KeyEvent ke) {
      int code = ke.getKeyCode();
      Integer val = Integer.valueOf(code);
      if (pressedKeys.contains(val)) {
        //we've already pressed the key and it is being held down
        return;
      }
      else {
        //process key event
      }
    }
    
    public void keyReleased(KeyVEnt ke) {
      pressedKeys.remove(ke.getKeyCode());
    }