因此,目前我正在製作迷宮遊戲,當然,它是一個迷宮遊戲,它必須有牆壁。牆壁需要阻止玩家越過他們。我在檢查碰撞時遇到問題。它在一些地方有效,而其他地方則不適用。我目前的方法是通過我的二維數組,通過將他們當前的x和y除以50,然後使用這兩個數字來嘗試查看玩家是否會碰撞牆或不。正在發生的事情是,它阻止了玩家移動到某些牆上,有些則沒有。此外,它還會阻止玩家在沒有牆的地方(值爲2的值)。我覺得有些東西正在與數學混淆,但我無法弄清楚什麼。下面是我如何製作迷宮,伴隨着陣列它正在從製造代碼:試圖通過2d數組,並沒有得到正確的值?
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
}
}
我覺得它應該起作用,但由於某種原因(我認爲這是用分割玩家座標之後的數字來表示),但事實並非如此。
我相信'playerX'和'playerY'是用戶點擊的座標,然後你試圖獲得該rectanagle左上角的cooridnates來確定是否碰撞。對? –
playerX和playerY的實際值是多少,它們總是可以被50整除?如果不是,那可能是問題。 – Chizzle