我已经知道矩形碰撞检测与矩形,但这次我有2个旋转的位图。 我的意思是,我有正常的位图+一个名为“方向”的浮点变量,并告诉位图必须在绘图时旋转到哪个方向。
但我怎么知道其中2个物体是否互相撞击?如果你能告诉我2个旋转矩形之间的碰撞检测是如何工作的话,那也是很有意思的......或许你可以发布一些代码......
如果你能提供帮助,谢谢你(感谢你花时间阅读或思考答案)
答案 0 :(得分:1)
通常,您需要使用Separating Axis Theorem来确定两个旋转的矩形是否发生碰撞。但是有一种简单的方法可以在使用SAT之前判断矩形是否发生碰撞,这样您就不必进行不必要的处理。您可以进行边界圆检查,通过证明它们的边界圆不相交来证明矩形不相交。
矩形的边界圆共享其中心,其直径等于矩形的任一对角线的长度。基本上,如果圆不相交,则矩形也不能相交。
我不确定你是如何进行旋转的,但是如果你使用的是Shape / Area类型的对象,你可以使用AffineTransform
来执行旋转,然后在Area of Area上使用intersects()
每个旋转的对象检查它们是否发生碰撞,这样可以避免自己实现它。请考虑以下示例:
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.geom.Area;
public class Main {
public static void main(String args[]) {
//Create rectangle
Rectangle rect = new Rectangle(10, 10, 10, 10);
//Create transformation object
AffineTransform af = new AffineTransform();
//Rotate the rectangle by 45 degrees
af.rotate(Math.PI/4, rect.x, rect.y);
Rectangle rect2 = new Rectangle(20, 20, 20, 20);
AffineTransform bf = new AffineTransform();
bf.rotate(Math.PI/4, rect2.x, rect2.y);
//Create Area objects based off of the Rectangle objects
Area areaA = new Area(rect);
//Set the Area object to be the same as the Rectangle object
areaA = areaA.createTransformedArea(af);
Area areaB = new Area(rect2);
areaB = areaB.createTransformedArea(bf);
//Check if the objects collide by using their Area equivalent
if (areaA.intersects(areaB.getBounds())) {
System.out.println("Collision!");
}
}
}
显然,你可以修改它以适应你的实现 - 我希望这能指明你正确的方向。