**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
我正在写一个推箱子游戏,我在移动玩家时遇到了麻烦。我可以移动玩家一个位置,但随后他被卡住了,但我也可以在其他方向上画一个新玩家,但不能移动
在我按下任何按钮Before之前
在我按下所有4个方向之后。After
我的按键代码如下:
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyChar() == 'w' || e.getKeyCode() == KeyEvent.VK_UP) {
tmpMap.movePlayer(1);
lbl_output.setText("you pressed up");
} else if(e.getKeyChar() == 's' || e.getKeyCode() == KeyEvent.VK_DOWN) {
tmpMap.movePlayer(2);
lbl_output.setText("you pressed down");
} else if(e.getKeyChar() == 'd' || e.getKeyCode() == KeyEvent.VK_RIGHT) {
tmpMap.movePlayer(3);
lbl_output.setText("you pressed right");
} else if(e.getKeyChar() == 'a' || e.getKeyCode() == KeyEvent.VK_LEFT) {
tmpMap.movePlayer(4);
lbl_output.setText("you pressed left");
} else {
lbl_output.setText("please use w,a,s,d or arrow keys to navigate ");
}
drawMap();
}
我的movePlayer方法是这样的。
public void movePlayer(int dir) {
int player_row = playerLocation.getX();
int player_col = playerLocation.getY();
if (dir == 1) {
myMap[player_row][player_col] = new Floor();
myMap[--player_row][player_col] = new Player();
} else if (dir == 2) {
myMap[player_row][player_col] = new Floor();
myMap[++player_row][player_col] = new Player();
} else if (dir == 3) {
myMap[player_row][player_col] = new Floor();
myMap[player_row][++player_col] = new Player();
} else if (dir == 4) {
myMap[player_row][player_col] = new Floor();
myMap[player_row][--player_col] = new Player();
}
}
1条答案
按热度按时间5jvtdoz21#
似乎每次按下一个键时
playerLocation.getX()
和playerLocation.getY()
都返回完全相同的值。检查这些函数,它们是如何获得这些值的。每次按下一个键后,它们用来计算X和Y值的数据是否被修改?如果没有,请确保它被修改。
这些函数返回相同的值,因此每次地板被放置在相同的位置,球员被放置在您想要的位置。当您按两次相同的按钮时,没有看到任何变化,因为相同的动作再次重复。
如果它们是getter函数,确保setter函数在你每次按下一个键时修改X和Y的值。在把玩家放置到所需的区块后调用setter函数。
再次,一个建议将是有一个单一的球员,而不是创建一个新的球员为每一个举动。