我正在尝试在不同对象之间实现碰撞检测系统。我想到了使用Area来进行this question的碰撞检测。
这在我的程序中并没有像在答案中那样工作,我在两个对象碰撞之前会发生碰撞,并且在它们应该停止之前停止。
我不确定哪个区域已关闭,左侧对象的区域位于右侧,或右侧对象的区域位于左侧,或两者兼而有之。
我无法找到一种方法来获取屏幕上的区域,因此我可以看到它们的位置。图形不支持drawArea();
或其他任何内容。
我从现有的Geom对象创建了区域:
private Ellipse2D collisionCircle = new Ellipse2D.Double(0,0,0,0);
private Area collisionArea;
// later inside the update() method
collisionCircle.setFrame(posX - 61, posY - 61, 122, 122);
collisionArea = new Area(collisionCircle);
我对另一个对象使用相同的技术:
private Rectangle collisionRect = new Rectangle(0,0,0,0);
private Area collisionArea;
// later in the update() method
collisionRect.setRect(posX - 61, posY - 61, 122, 122);
collisionArea = new Area(collisionRect);
在主游戏部分,我使用了与前面提到的问题相同的碰撞方法。
结果
制作区域的对象(矩形和椭圆)都以1像素边框绘制到屏幕上,并且可以清晰地看到。它们开始在它们应该之前发生碰撞(按照这种方法),并在它们应该仍然发生碰撞时停止。
我希望能够直观地表示Area对象,而不是几何对象,所以我可以解决这个问题。可以这样做吗?