Android游戏逻辑问题

时间:2010-12-31 00:16:35

标签: java android

我正在创建一个游戏并遇到一个问题,我想我知道它为什么会发生但不完全确定,即使我知道,也不知道如何解决。 我有一个10 x 10的2D数组,并且有一个占据瓷砖的“播放器”类。 现在,我创建了2个播放器实例并通过滑动移动它们。 在边缘附近,我放置了玩家无法穿过的“墙壁”,一切正常,直到我移除墙壁。 一旦我移除墙壁并将角色/玩家移动到屏幕边缘,玩家就无法继续前进。 这里出现问题,其中播放器的第二个实例不在屏幕的边缘,而是说位于边缘的“玩家”的第一个实例中的2个图块。 如果我尝试将它们进一步移动到边缘的方向,我理解玩家的第一个实例不会移动或做任何事情,但玩家的第二个实例应该仍然移动,但它不会。

这是用户滑动时执行的代码:

if (player.getArrayX() - 1 != player2.getArrayX()) {
    player.moveLeft();
} else if (player.getArrayX() - 1 == player2.getArrayX() && player.getArrayY() != player2.getArrayY()) {
    player.moveLeft();
}

if (player2.getArrayX() - 1 != player.getArrayX()) {
    player2.moveLeft();
} else if (player2.getArrayX() - 1 == player.getArrayX() && player2.getArrayY() != player.getArrayY()) {
    player2.moveLeft();
}

在玩家类中我有:

public void moveLeft() {
    if (alive) {
        switch (levelMaster.getLevel1(getArrayX() - 1, getArrayY())) {
        case 0:
            break;
        case 1:
            subX(); // basically moves player left
            setArrayX(getArrayX() - 1); // shifts x coord of player 1 within tilemap
            Log.d("semajhan", "x: " + getArrayX());
            break;
        case 9:
            subX();
            setArrayX(getArrayX() - 1);
            setAlive(false);
            break;
        }
    }
}

非常感谢任何有关此事或进一步见解的帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

通过添加if else语句解决:

public int getLevel1(int i, int j) {

    int[][] level = {
            {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
            {1, 1, 1, 0, 0, 1, 0, 1, 1, 1},
            {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
            {1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
            {1, 0, 1, 1, 1, 1, 0, 1, 0, 1},
            {1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
            {1, 0, 1, 1, 0, 1, 1, 1, 0, 1},
            {1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
            {1, 0, 1, 1, 0, 1, 1, 1, 0, 1},
            {1, 0, 1, 1, 0, 1, 8, 1, 0, 1},
            {1, 0, 9, 1, 1, 1, 0, 1, 0, 1},
            {1, 0, 1, 1, 1, 1, 0, 1, 0, 1},
            {1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
            {1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
            {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
    };
    if (i >= 0 && i <= 9 && j >= 0 && j <= 14) {
        return level[j][i];
    } else {
        return 10;
    }
}