有 Java 编程相关的问题?

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

java两个线程调用相同的keyEvents方法

我有一个player1 keyEvents的线程可以运行,但是当我为player2 keyEvents添加另一个线程时,只有player2按键被注册。这是线程的问题还是keyEvents()方法的问题?我不知道下一步该怎么办

    //keyEvents thread for player 1
    AnimationTimer player1_timer = new AnimationTimer(){
        @Override
        public void handle(long now){
            keyEvents(player1, 1);
        }
    };
    player1_timer.start();

    if(true){ //if I set this to false, player1 keyEvents are registered again.
        //keyEvents thread for player 2
        AnimationTimer player2_timer = new AnimationTimer(){
            @Override
            public void handle(long now){
                keyEvents(player2, 2);
            }
        };
        player2_timer.start();
    }

private void keyEvents(Unit player, int playerNumber){
    map.setOnKeyPressed((KeyEvent e) -> {
        if(playerNumber == 1){
            if(null != e.getCode())switch (e.getCode()) {
                case LEFT:
                    player1.rotateLeft();
                    break;
                default:
                    break;
            }
        }
        if(playerNumber == 2){
            if(null != e.getCode())switch (e.getCode()) {
                case A:
                    player2.rotateLeft();
                    break;
                default:
                    break;
            }
        }
    });
}

更新代码:

//keyEvents thread for players
    AnimationTimer playerTimer = new AnimationTimer(){
        @Override
        public void handle(long now){
            keyEvents();
        }
    };
    playerTimer.start();
private void keyEvents(){
        Bullet bullet = new Bullet();
        map.setOnKeyPressed((KeyEvent e) -> {
            if(null != e.getCode())switch (e.getCode()) {
                case A:
                    player2.rotateLeft();
                    break;
                case LEFT:
                    player1.rotateLeft();
                    break;
                default:
                    break;
            }
        });
    }

共 (0) 个答案