【发布时间】:2014-04-14 11:32:16
【问题描述】:
我正在尝试在不同对象之间实现碰撞检测系统。我从this question 得到了使用 Area 进行碰撞检测的想法。
这在我的程序上并不像在答案中那样工作,我在两个对象之间发生碰撞,然后它们应该碰撞并且它们在它们应该停止之前停止。
我不确定哪个区域已关闭,要么是左侧对象的区域在右侧,要么右侧对象的区域在左侧,或者两者兼而有之。
我很难找到一种方法来直观地显示屏幕上的区域,以便我可以看到它们的位置。图形不支持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 像素的边框绘制到屏幕上,并且可以清楚地看到。它们在应该发生碰撞之前(根据这种方法)开始碰撞,并在应该仍然碰撞时停止。
我希望能够直观地表示区域对象,而不是几何对象,这样我就可以解决这个问题。这个可以吗?
【问题讨论】:
标签: java awt collision-detection draw area