我需要检测一个球(椭圆形)和许多块(矩形)之间的碰撞。在表示游戏中的块的类Block中,我有以下代码来检测碰撞(其简短版本,仅用于显示示例):
if(ballYPos <= blockYPos
&& ballYPos >= blockYPos
&& ballXPos >= blockXPos
&& ballXPos+ballWidth <= blockXPos+blockWidth) {
collision
}
碰撞不好,因为椭圆形,但一般来说,我想问一下java(swing)中是否有东西来检测碰撞,我的意思是如果矩形在Canvas上没有完全显示,这意味着球重叠块坐标
答案 0 :(得分:3)
方法Shape.intersects()
可用于确定形状是否与任何矩形相交。幸运的是,也可以使用非矩形形状,例如椭圆形。这是一个例子:
public class IntersectExample extends JFrame {
public IntersectExample() {
add(new JPanel() {
@Override
protected void paintComponent(Graphics g) {
Shape oval = new Ellipse2D.Double(10, 10, 200, 200);
Shape rect = new Rectangle2D.Double(190, 190, 200, 200);
Graphics2D g2 = (Graphics2D) g;
g2.draw(oval);
g2.draw(rect);
System.out.println(oval.intersects(rect.getBounds()));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
});
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
}
public static void main(String[] args) {
new IntersectExample().setVisible(true);
}
}
看起来像这样......
...并将false
打印到控制台。这表明,不仅要比较边界矩形,还要比较实际的形状区域。
答案 1 :(得分:0)
类java.awt.Rectangle有一个intersects方法(Rectangle r),当两个矩形占据相同的空间(source)时返回true。我想你可以根据自己的需要调整它。