我正在研究激光与 Java 中的怪物碰撞的边界框碰撞。碰撞没有问题。问题是 OneEye 类中的 Rectangle 对象是静态的!
问题 1:如果游戏中有一个怪物,这没问题,但在我的游戏中,我将添加很多 Monster 类的实例。因此,如果我要添加多个怪物,我的 Rectangle 对象就不能是静态的。
问题 2:注意:如果 Rectangle 对象是非静态的,我的 Rectangle 的 getter 方法需要是非静态的。
但我似乎无法弄清楚如何解决这两个问题。
再次,我的碰撞有效!如果我要添加同一个类的不同实例,这更像是一个代码设计缺陷。总而言之,我如何在当前类中引用来自不同类的实例我正在编写代码而不在静态上下文中引用它。
这是我的两个类的代码:激光类和 OneEye 类
public class Laser {
/* use a bounding box
* to test collision detection
*
*/
private Rectangle rect;
public void update(long milliseconds) {
// surround a bounding box around the laser
rect = new Rectangle((int)position.x,(int)position.y,this.getWidth(),this.getHeight());
// collision against the OneEye monster
if(rect.intersects(OneEye.getRectangle()))
{
Game.getInstance().remove(this);
}
}
public class OneEye {
/*
* use bounding box
* for collision
* detection
*/
private static Rectangle rect;
public void update(long milliseconds) {
// surround a bounding box around the oneEye monster
rect = new Rectangle((int)position.x,(int)position.y,this.getWidth(),this.getHeight());
}
// can be useful for collision detection
public static Rectangle getRectangle()
{
return rect;
}
}