所以目前我正在制作一个迷宫游戏,当然它是一个迷宫游戏,它必须有墙。墙需要阻止玩家越过他们。我在检查碰撞时遇到问题。它适用于某些地方,而其他地方则不适用。我当前的方法是通过我的2d数组,通过将当前的x和y除以50,然后使用这两个数字来查看玩家是否会与墙碰撞或不。发生的事情是它阻止玩家移动某些墙壁,有些则不然。此外,它还可以在没有墙壁的地方停止玩家(一个值为2的值)。我觉得有些东西搞砸了数学,但我无法弄清楚是什么。以下是我如何制作迷宫的代码,以及它的制作阵列:
private int[][] mazeWalls = { //top of the maze
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
{1, 1, 1, 1, 2, 2, 2, 2, 2, 1},
/*left side*/{1, 2, 2, 2, 2, 2, 2, 2, 2, 1}, //right side
{1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 1, 2, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
//bottom of the maze
};
public void paintMaze(Graphics g){
for(int row = 0; row < mazeWalls.length; row++){ //example of loops
for(int col = 0; col < mazeWalls[row].length; col++){ //getting the positions set up
if(mazeWalls[row][col] == 1){
g.setColor(Color.RED); //color of the walls
g.fillRect(col * 50, row * 50, 50, 50); //col times 50 is the x coordinate, and row times 50 is the y coordinate
}
}
}
}
以下是我在同一课程中检查碰撞的代码:
public void collisionChecker(int playerX, int playerY){ //takes the user's location and then checks if they are running into the wall
if(mazeWalls[playerX / 50][playerY / 50] == 1 ){
setCollision(true);
}
else if(mazeWalls[playerX / 50][playerY / 50] != 1){
setCollision(false); //just in case
}
}
我觉得它应该可以工作,但出于某种原因(我认为除了玩家的坐标之后的数字是什么),它不是。
答案 0 :(得分:1)
2D数组中的第一个索引按照惯例是行索引,第二个是列索引,所以你的坐标是错误的方法:
public void collisionChecker(int playerX, int playerY){ //takes the user's location and then checks if they are running into the wall
if(mazeWalls[playerY / 50][playerX / 50] == 1 ){
setCollision(true);
}
else if(mazeWalls[playerY / 50][playerX / 50] != 1){
setCollision(false); //just in case
}
}
此代码可简化为
public void collisionChecker(int playerX, int playerY){ //takes the user's location and then checks if they are running into the wall
setCollision(mazeWalls[playerY / 50][playerX / 50] == 1);
}