【问题标题】:Can I Change Variable with KeyListener?我可以使用 KeyListener 更改变量吗?
【发布时间】:2018-12-01 11:09:15
【问题描述】:
public void keyPressed(KeyEvent e) {
                int setNum = 1;
                if(e.getKeyCode() == 'u'|| e.getKeyCode() == 'U' && setNum == 1) {
                    setNum = 2;
                }

这是2Player俄罗斯方块游戏代码的一部分::键设置

                if(e.getKeyCode() == 'u'|| e.getKeyCode() == 'U' && setNum == 2) {
                    setNum = 1;
                }
                if(setNum == 1) {
                    if(e.getKeyCode() == 'a' || e.getKeyCode() == 'A') {
                        board1.tryMove(board1.curPiece, board1.curX - 1, board1.curY);
                    }   
                    if(e.getKeyCode() == 'd' || e.getKeyCode() == 'D') {
                        board1.tryMove(board1.curPiece, board1.curX + 1, board1.curY);
                    }
                    if(e.getKeyCode() == 's' || e.getKeyCode() == 'S') {
                        board1.oneLineDown();
                    }
                    if(e.getKeyCode() == 'w' || e.getKeyCode() == 'W') {
                        board1.tryMove(board1.curPiece.rotateLeft(), board1.curX, board1.curY);
                    }   
                    if(e.getKeyCode() == KeyEvent.VK_SHIFT) {
                        board1.dropDown();
                    }
                    if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
                        board2.tryMove(board2.curPiece, board2.curX + 1, board2.curY);
                    }
                    if(e.getKeyCode() == KeyEvent.VK_LEFT) {
                        board2.tryMove(board2.curPiece, board2.curX - 1, board2.curY);
                    }
                    if(e.getKeyCode() == KeyEvent.VK_DOWN) {
                        board2.oneLineDown();               
                    }
                    if(e.getKeyCode() == KeyEvent.VK_UP) {
                        board2.tryMove(board2.curPiece.rotateLeft(), board2.curX, board2.curY);
                    }
                    if(e.getKeyCode() == KeyEvent.VK_SPACE) {
                        board2.dropDown();  
                    }

                }

当 setNum = 1;玩家1可以用WASD玩,玩家2可以用箭头键玩

                else if(setNum == 2) {
                    if(e.getKeyCode() == '2' || e.getKeyCode() == '2') {
                        setNum = 1; 
                    }
                    if(e.getKeyCode() == 'a' || e.getKeyCode() == 'A') {
                        board2.tryMove(board2.curPiece, board2.curX - 1, board2.curY);
                    }   
                    if(e.getKeyCode() == 'd' || e.getKeyCode() == 'D') {
                        board2.tryMove(board2.curPiece, board2.curX + 1, board2.curY);
                    }
                    if(e.getKeyCode() == 's' || e.getKeyCode() == 'S') {
                        board2.oneLineDown();
                    }
                    if(e.getKeyCode() == 'w' || e.getKeyCode() == 'W') {
                        board2.tryMove(board2.curPiece.rotateLeft(), board2.curX, board2.curY);
                    }   
                    if(e.getKeyCode() == KeyEvent.VK_SHIFT) {
                        board2.dropDown();
                    }
                    if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
                        board1.tryMove(board1.curPiece, board1.curX + 1, board1.curY);
                    }
                    if(e.getKeyCode() == KeyEvent.VK_LEFT) {
                        board1.tryMove(board1.curPiece, board1.curX - 1, board1.curY);
                    }
                    if(e.getKeyCode() == KeyEvent.VK_DOWN) {
                        board1.oneLineDown();               
                    }
                    if(e.getKeyCode() == KeyEvent.VK_UP) {
                        board1.tryMove(board1.curPiece.rotateLeft(), board1.curX, board1.curY);
                    }
                    if(e.getKeyCode() == KeyEvent.VK_SPACE) {
                        board1.dropDown();  
                    }

                }

而 setNum =2; Player1可以用方向键玩,Player2可以用wasd键玩。

  • 我想编写代码,当按下“U”键时,用 player1 和 player2 更改键设置。 (WASD SHIFT 方向键和空格键)

但我的代码不起作用。我该怎么办?

【问题讨论】:

  • setNumkeyPressed() 方法的本地。你想改变方法之外的东西吗?

标签: java keylistener


【解决方案1】:

有用的答案是应该在离开事件监听器之前进行关键处理。也就是说,使用来自匿名内部类的适当参数调用相关方法。

字面意义上的最小答案是将setNum 的声明移出适当的范围。如果适当的范围不是一个类(即它不会是一个字段),那么您还有一个额外的问题是它必须是有效的 final 但还有很多其他问题需要处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多