如何在java中修复getBound方法?

时间:2016-12-08 18:41:12

标签: java swing collision-detection

enter image description here

这是一款简单的java游戏,它包含craft.java和wall.java类。图片中的所有红线都是墙类的对象

public void buildWall(){

        walls.add(new Wall(10,10,getWidth()-10, 10));
        walls.add(new Wall(10,10,10,getHeight()-10));
        walls.add(new Wall(10,getHeight()-10,getWidth()-10,getHeight()-10));
        walls.add(new Wall(getWidth()-10, getHeight()-10, getWidth()-10, 10));
        walls.add(new Wall(100, 10, 100, 50));
        walls.add(new Wall(150, 10, 150, 50));

    }

我写了一个getBound2D()方法来定义行

public Wall(int x, int y , int z , int v){

         this.x = x;
         this.y = y;
         this.z = z;
         this.v = v;
         vis = true;

         line = new Line2D.Double(x,y,z,v);
     }

    @Override
    public Rectangle2D getBounds2D() {
        return new Rectangle(x,y,z,v);
    }

但此方法无法正常工作。我的目的是当飞机触及任何一个线路检查碰撞并将游戏结束。我该如何解决?

1 个答案:

答案 0 :(得分:3)

Line有自己的getBounds,因此你可以使用它:

它有getBounds()和getBounds2D();

垂直线的宽度为零,水平线的高度为零。

System.out.println(new Line2D.Double(0, 0, 0, 100).getBounds()+" "+new Line2D.Double(0, 0, 100, 0).getBounds2D());

要使垂直/水平线具有宽度/高度1,您可以将其定义为:

getBounds2D() {
  return new Rectangle(x, y, z-x+1, v-y+1);
}