java 移动玩家[已关闭]

hgc7kmma  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(146)

**已关闭。**此问题需要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();
    }

}
5jvtdoz2

5jvtdoz21#

似乎每次按下一个键时playerLocation.getX()playerLocation.getY()都返回完全相同的值。
检查这些函数,它们是如何获得这些值的。每次按下一个键后,它们用来计算X和Y值的数据是否被修改?如果没有,请确保它被修改。
这些函数返回相同的值,因此每次地板被放置在相同的位置,球员被放置在您想要的位置。当您按两次相同的按钮时,没有看到任何变化,因为相同的动作再次重复。
如果它们是getter函数,确保setter函数在你每次按下一个键时修改X和Y的值。在把玩家放置到所需的区块后调用setter函数。
再次,一个建议将是有一个单一的球员,而不是创建一个新的球员为每一个举动。

相关问题