gpt4 book ai didi

java - 快速Java图像碰撞检测算法

转载 作者:行者123 更新时间:2023-11-30 11:10:19 25 4
gpt4 key购买 nike

我正在开发 Java 2D 视频游戏,我正在寻找一种比您在下面看到的更快的碰撞检测算法。我正在尝试检测鱼雷和船只之间的碰撞。我使用的算法严重影响了我的主要 Graphics 2D 调度循环的性能,减慢了我的屏幕重绘。想知道是否有人可以推荐一种更好的算法来处理这个问题,这样可以更快地检测到碰撞?指向示例代码的指针会很棒!

这是我正在使用的一个像素一个像素的慢算法..

    private boolean isPixelCollide(double x1, double y1, VolatileImage image1,
double x2, double y2, VolatileImage image2) {

double width1 = x1 + image1.getWidth() -1,
height1 = y1 + image1.getHeight() -1,
width2 = x2 + image2.getWidth() -1,
height2 = y2 + image2.getHeight() -1;

int xstart = (int) Math.max(x1, x2),
ystart = (int) Math.max(y1, y2),
xend = (int) Math.min(width1, width2),
yend = (int) Math.min(height1, height2);

// intersection rect
int toty = Math.abs(yend - ystart);
int totx = Math.abs(xend - xstart);

for (int y=1;y < toty-1;y++){
int ny = Math.abs(ystart - (int) y1) + y;
int ny1 = Math.abs(ystart - (int) y2) + y;

for (int x=1;x < totx-1;x++) {
int nx = Math.abs(xstart - (int) x1) + x;
int nx1 = Math.abs(xstart - (int) x2) + x;
try {
if (((image1.getSnapshot().getRGB(nx,ny) & 0xFF000000) != 0x00) &&
((image2.getSnapshot().getRGB(nx1,ny1) & 0xFF000000) != 0x00)) {
// collide!!
return true;
}
} catch (Exception e) {
// System.out.println("s1 = "+nx+","+ny+" - s2 = "+nx1+","+ny1);
}
}
}

return false;

最佳答案

您可以使用 Rectangle 类定义场景中每个对象的边界,然后使用 Rectangle#intersect(Rectangle rect) 方法。所以你的 intersect 方法看起来像这样:

private boolean intersect(double x1, double y1, VolatileImage image1, double x2, double y2, VolatileImage image2) {
return (new Rectangle(x1, y1, image1.getWidth(), image1.getHeight()).intersect(new Rectangle(x2, y2, image2.getWidth(), image2.getHeight()));
}

关于java - 快速Java图像碰撞检测算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27733204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com