我正在制作一個迷宮游戲,并且我正在嘗試實作一個墻壁功能,如果玩家與墻壁發生碰撞,它將限制玩家的移動。我創建了一個墻類,以便我可以手動實作多個墻。問題是我的 intersectsWith 方法,它檢測一個圓形和一個矩形是否正在碰撞(玩家是一個圓形)接收一個 Player 型別的玩家和一個 Wall 型別的單面墻。我將如何做到這一點,以便我的方法可以檢測到游戲中所有墻壁的碰撞,而不僅僅是一個,這樣如果我的玩家遇到任何墻壁,它就會檢測到它?我覺得我需要使用墻壁的 ArrayList 或類似的東西。這是我在播放器類中的碰撞檢測代碼:
public boolean intersectsWith(Wall wall) {
double testX = x;
double testY = y;
if (x < wall.getX()) {
testX = wall.getX();
} else if (x > wall.getX() wall.getWidth()) {
testX = wall.getX() wall.getWidth();
}
if (y < wall.getY()) {
testY = wall.getY();
} else if (y > wall.getY() wall.getHeight()) {
testY = wall.getY() wall.getHeight();
}
double distanceX = x - testX;
double distanceY = y - testY;
double distance = Math.sqrt(distanceX * distanceX distanceY * distanceY);
if (distance < radius) {
return true;
} else {
return false;
}
}
uj5u.com熱心網友回復:
我實際上只是做了一個游戲引擎,所以我已經處理了很多碰撞。
- 首先,您是對的,將所有墻壁添加到 ArrayList 并回圈遍歷它們并檢查玩家的矩形是否與另一個矩形碰撞。像這樣的東西(偽代碼):
for (Wall w : wallsArrayList) {
if (myRectangle.intersects(w)) {
return true;
}
}
- 如果性能是一個問題,你可以試試這個,但是我沒有在我的游戲中遇到任何問題,使用上面的解決方案:
- 創建一個跟隨玩家的 Rectangle 物件,如果需要,可以將其設定為視口的大小,或者只是使其比玩家大一點。獲取跟隨玩家的較大矩形內的所有矩形,然后遍歷這些矩形并檢查碰撞。就性能而言,我不完全確定它是否更好,但在我看來,它似乎會更好。
這是我在 Stackoverflow 上的第一個答案......所以讓我知道我是否做錯了什么:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/461137.html
上一篇:如何制作技能共享中的線路?
