我目前遍历所有的精灵,检查它们是否彼此相交,如下所示:
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/