我可以使用 KeyListener 更改变量吗?
Can I Change Variable with KeyListener?
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' 键时,更改播放器 1 和播放器 2 的键设置。
(WASD SHIFT <-> 箭头键和空格键)
但是我的代码不起作用。我该怎么办?
有用的答案是应该在离开事件侦听器之前进行关键处理。也就是说,使用来自匿名内部 class.
的适当参数调用相关方法
字面上的最小答案是将 setNum
的声明移到适当的范围。如果适当的范围不是 class(即它不会是一个字段),那么你还有一个额外的问题,那就是它必须是有效的 final,但还有很多其他问题要处理。
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' 键时,更改播放器 1 和播放器 2 的键设置。 (WASD SHIFT <-> 箭头键和空格键)
但是我的代码不起作用。我该怎么办?
有用的答案是应该在离开事件侦听器之前进行关键处理。也就是说,使用来自匿名内部 class.
的适当参数调用相关方法字面上的最小答案是将 setNum
的声明移到适当的范围。如果适当的范围不是 class(即它不会是一个字段),那么你还有一个额外的问题,那就是它必须是有效的 final,但还有很多其他问题要处理。