我目前遍历所有的精灵,检查它们是否彼此相交,如下所示:

for (Sprite s : sprites) {
        if (s.dead) {
            dead.add(s);
        }
        for (Sprite sprite : sprites) {
            if (!sprite.equals(s)) {
                s.collide(sprite, maxX, maxY);
            }
        }
        s.run();

}


精灵使用Rect.intersects()方法进行检查,如下所示:

if (getRect().intersects(s.getRect()))


但是有时它只是完全忽略了碰撞,而对象只是彼此通过。

有任何想法吗?

最佳答案

您应该尝试将代码更改为

if(getRect().intersects(s.getRect()) || s.getRect().intersects(getRect()))
{
    // They have intersected
}


原因是,交集方法检查对于每个矩形都是唯一的。执行交叉检查以查看矩形a是否与矩形b相交不同于执行交叉检查以查看矩形b是否与矩形a相交。

除此之外,您能给我更多有关矩形的信息吗?他们在旋转吗?他们移动的速度有多快?它们有多大?其他信息也将被全部使用,我可以尝试考虑其他原因导致它们不冲突。

关于java - Java Rect.intersects()有时无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22467408/

10-15 06:44