我正在开发一个 2d 街机游戏,其中有 5 种不同大小的圆圈:船、导弹和 3 种怪物。
这是它的样子:
目前我正在使用蛮力碰撞检测,在不考虑碰撞概率的情况下检查每个导弹与每个怪物。可悲的是,这使得这个过程真的很慢。
这是我的 Grid 类,但它不完整。非常感谢您的帮助。
public class Grid {
int rows;
int cols;
double squareSize;
private ArrayList<Circle>[][] grid;
public Grid(int sceneWidth, int sceneHeight, int squareSize) {
this.squareSize = squareSize;
// Calculate how many rows and cols for the grid.
rows = (sceneHeight + squareSize) / squareSize;
cols = (sceneWidth + squareSize) / squareSize;
// Create grid
this.grid = (ArrayList[][]) new ArrayList[cols][rows]; //Generic array creation error workaround
}
The addObject method inside the Grid class.
public void addObject(Circle entity) {
// Adds entity to every cell that it's overlapping with.
double topLeftX = Math.max(0, entity.getLayoutX() / squareSize);
double topLeftY = Math.max(0, entity.getLayoutY() / squareSize);
double bottomRightX = Math.min(cols - 1, entity.getLayoutX() + entity.getRadius() - 1) / squareSize;
double bottomRightY = Math.min(rows - 1, entity.getLayoutY() + entity.getRadius() - 1) / squareSize;
for (double x = topLeftX; x < bottomRightX; x++) {
for (double y = topLeftY; y < bottomRightY; y++) {
grid[(int) x][(int) y].add(entity); //Cast types to int to prevent loosy conversion type error.
}
}
}
但这就是我完全不知所措的地方。我什至不确定我提供的源代码是否正确。请让我知道如何使基于网格的碰撞工作。我基本上已经阅读了我可以掌握的所有教程,但效果不佳。谢谢。