KeyEvent:使多个输入一起工作



查看下面的代码:

public void keyPressed(KeyEvent e)
{
    if (e.getKeyCode() == KeyEvent.VK_W)
    {
        new panel().player1.playerMoves("North", 10, 600,500);
    }
    else if (e.getKeyCode() == KeyEvent.VK_S)
    {
        new panel().player1.playerMoves("South", 10, 600,500);
    }
    if (e.getKeyCode() == KeyEvent.VK_UP)
    {
        new panel().player2.playerMoves("North", 10, 600,500);
    }
    else if (e.getKeyCode() == KeyEvent.VK_DOWN)
    {
        new panel().player2.playerMoves("South", 10, 600,500);
    }
}

我对它没有任何问题,我的问题不需要我调用的类的知识。现在的情况是有两个玩家。Player1的控件绑定到方向键,player2的控件绑定到箭头键。然而,这些if语句似乎是相互覆盖的。我的意思是,如果player1向上移动,而player2开始向下移动,那么player1将不得不停止。我正在考虑使用多线程解决这个问题,但我不确定它是否有效,或者是否有一个更简单的解决方案。我能做些什么来让多个按键一起工作吗?

您可以将已按下的键存储在某个列表中,称为pressedKeys。当按下某个键时,将该键添加到pressedKeys。当一个键被释放时(覆盖keyReleased()方法),您从pressedKeys中删除该键。然后,你可以根据按下的按键来移动玩家。例如,

    public void movePlayer() {
        if ( pressedKeys.contains( UP ) ) {
            movePlayerUp();
        }
        if ( pressedKeys.contains( DOWN ) ) {
            movePlayerDown();
        }
        if ( pressedKeys.contains( S ) ) {
            movePlayerDown();
        }
        ...
    }

所需的类:

class MyListener implements KeyListener {
    private ArrayList< Integer > keysPressed = new ArrayList< Integer >();
    public MyListener() {
    }
    @Override
    public void keyPressed( KeyEvent e ) {
        if ( !keysPressed.contains( e.getKeyCode() ) ) {
            keysPressed.add( e.getKeyCode() );
        }
        movePlayer();
    }
    @Override
    public void keyReleased( KeyEvent e ) {
        keysPressed.remove( e.getKeyCode() );
    }
    public void movePlayer() {
        //move player based on what keys are pressed.
    }
}

相关内容

  • 没有找到相关文章

最新更新