如何在其中初始化 class 和形状 属性?
How to initialise a class and a shape property within it?
我正在构建地图,并在上面尝试添加节点,例如墙、摄像机、门等...现在这些都是由矩形等形状组成的,我已经完成了这个已经但是我正在尝试重新处理它,因为我的碰撞检测算法有问题,因为我可以检查形状之间的碰撞但是当我试图告诉 class 形状派生的时候它会给我带来问题从(例如,门或墙的矩形)采取什么行动。
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;
}
}
有什么方法可以使这种 class 正常工作并 return 我成为一个矩形而无需使用 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);
}
}
您 Door
class 中不需要 Rectangle
字段,您 Door
已经扩展了 Rectangle
。说 Door
扩展了 Rectangle
,这意味着 Door
是一个 Rectangle
。所以如果你有这样的碰撞检查功能:
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;
}
我正在构建地图,并在上面尝试添加节点,例如墙、摄像机、门等...现在这些都是由矩形等形状组成的,我已经完成了这个已经但是我正在尝试重新处理它,因为我的碰撞检测算法有问题,因为我可以检查形状之间的碰撞但是当我试图告诉 class 形状派生的时候它会给我带来问题从(例如,门或墙的矩形)采取什么行动。
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;
}
}
有什么方法可以使这种 class 正常工作并 return 我成为一个矩形而无需使用 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);
}
}
您 Door
class 中不需要 Rectangle
字段,您 Door
已经扩展了 Rectangle
。说 Door
扩展了 Rectangle
,这意味着 Door
是一个 Rectangle
。所以如果你有这样的碰撞检查功能:
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;
}