2017-08-13 82 views
2

我建立一个地图,并在其上,我试图添加如墙壁,相机,门等节点......现在这些都是由形状如矩形的,我已经做到了这一点,但我“M努力,因为我有我的碰撞检测算法故障返工它,因为我可以检查形状之间的碰撞,但它使我的问题,当我试图告诉从中形状从(例如,矩形的门派生的类或墙)采取什么行动。如何初始化一个类和一个shape属性?

public class Door { 

    private int x, y; 

    public Door(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public Door getTarget() { 
     Door door = new Rectangle(x, y, 30, 20); 
     return door; 
    } 
} 

有什么办法,我可以得到这种类的工作,还给我一个矩形,而无需使用了getTarget()方法?

public class Door extends Rectangle { 

    public double x,y; 
    public Rectangle door; 

    public Door(double x, double y) { 
     this.x = x; 
     this.y = y; 
     door = new Rectangle(x, y, 30, 20); 
    } 

} 
+0

困惑......“返回我的矩形,而无需使用了getTarget()方法“......所以你想要一种从对象中获取某些东西的方法,而不用调用方法......?为什么调用方法不好?你可以为getTarget()添加一个getterget()来返回this.door? – Adam

+0

因此,我在我的程序的主类中有一个碰撞检测算法,现在该算法将一个Shape数组作为参数(此数组包含所有节点的形状;例如所有门的矩形,我在程序中也有人类其使用例如圆圈)让我们说一个人(圈子)与门(矩形),然后,我想打电话给在人类的功能改变了他的行走方向,但因为我只解析形状的算法我碰撞不知道如何告诉人类自己改变方向,我只能指示形状做出行动。 – bigPoppa350

+0

我在这里感觉就像那里有一个非常简单的解决办法,但我瞎了吧... – bigPoppa350

回答

1

你不应该需要在DoorRectangle场,你Door已经延伸Rectangle。按说Door扩展Rectangle,这意味着DoorRectangle。所以,如果你有一个碰撞检查功能,像这样:

public Boolean testCollision(Rectangle first, Rectangle second) { ... } 

你可以简单地传递任何Door对象这种方法。

Door first = new Door() 
Door second = new Door() 
if (testCollision(first, second) { 
    // do stuff 
} 

如果您需要在您的testCollision方法不同Rectangle类型来区分,可以投:

if (first instanceof Door) { 
    Door firstAsDoor = (Door)first; 
}