Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多人游戏的按键监听器,同时按键?_Java_Key_Keylistener - Fatal编程技术网

Java 多人游戏的按键监听器,同时按键?

Java 多人游戏的按键监听器,同时按键?,java,key,keylistener,Java,Key,Keylistener,我正在写一个两人蛇游戏。箭头键响应一条蛇,WASD键响应另一条蛇。然而,我在我的代码中注意到,如果在同一时间按下每一条蛇的一个键,那么只有一条蛇转动。我有两个KeyListener,其中包含它应该响应的四个键的数组 class PlayerKeyPressListener implements KeyListener { // Set of currently pressed keys private final Set<Integer> pressed;

我正在写一个两人蛇游戏。箭头键响应一条蛇,WASD键响应另一条蛇。然而,我在我的代码中注意到,如果在同一时间按下每一条蛇的一个键,那么只有一条蛇转动。我有两个KeyListener,其中包含它应该响应的四个键的数组

class PlayerKeyPressListener implements KeyListener {

    // Set of currently pressed keys
    private final Set<Integer> pressed; 
    private int keyEvent[];
    private Color c;
    private int i;

    public PlayerKeyPressListener(int[] a, Color col, int i) {
        super();
        pressed = new HashSet<Integer>();
        keyEvent = a;
        c = col;
        this.i = i;
    }


    @Override
    public void keyPressed(KeyEvent e) {
        if(!(pressed.contains(keyEvent[0]) || pressed.contains(keyEvent[1]) 
                || pressed.contains(keyEvent[2]) || pressed.contains(keyEvent[3])))
            pressed.add(e.getKeyCode());
        proccessKey(e.getKeyCode());
    }

    @Override
    public void keyReleased(KeyEvent e) { 
        pressed.remove(e.getKeyCode());
    }

    @Override
    public void keyTyped(KeyEvent e) {/* Not used */ }

    public void proccessKey(int key){
        if(canTurn[i]) {    
            int d = grid.getDirection(c);
            if(key == keyEvent[0]) {
                if(d == 360)

                    grid.setDirection(d - 90, c); //Sets the direction of the snake with the specified color 
                else if(d == 180)
                    grid.setDirection(d + 90, c);
            }
            else if(key == keyEvent[1]) {
                if(d == 360)
                    grid.setDirection(d + 90, c);
                else if(d == 180)
                    grid.setDirection(d - 90, c);
            }
            else if(key == keyEvent[2]) {
                if(d == 90)
                    grid.setDirection(d - 90, c);
                else if(d == 270)
                    grid.setDirection(d + 90, c);
            }
            else if(key == keyEvent[3]) {
                if(d == 90)
                    grid.setDirection(d + 90, c);
                else if(d == 270)
                    grid.setDirection(d - 90, c);
            }
            canTurn[i] = false;
        } 
    }
}

有没有一种方法可以让两个玩家的反应更灵敏

如果同时按下按键,蛇会移动哪个玩家?第一次还是第二次?或者是随机的?可能是因为只有一个按键被通知,你能尝试将两个按键处理器移动到一个processKey(..)方法中吗?
int[] a = {KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT, KeyEvent.VK_UP, KeyEvent.VK_DOWN};
    int[] b = {KeyEvent.VK_A, KeyEvent.VK_D, KeyEvent.VK_W, KeyEvent.VK_S};
    this.addKeyListener(new PlayerKeyPressListener(a, Color.blue, 0));
    this.addKeyListener(new PlayerKeyPressListener(b, Color.red, 1));