如何在Java中引用当前类中不同类的实例
我正在研究Java中激光与怪物碰撞的包围盒碰撞。碰撞没有问题。问题是OneEye类中的矩形对象是静态的 问题1:如果游戏中有一个怪物,这没有问题,但是在我的游戏中,我会添加很多怪物类的实例。因此,如果我要添加多个怪物,我的矩形对象就不能是静态的 问题2:注意:如果矩形对象是非静态的,那么矩形的getter方法需要是非静态的 但我似乎不知道如何解决这两个问题 再一次,我的碰撞成功了!如果我在同一个类中添加不同的实例,这更像是一个代码设计缺陷。总而言之,如何引用当前类中不同类的实例我正在编写代码,而不在静态上下文中引用它 这是我的两个类代码:激光类和单眼类如何在Java中引用当前类中不同类的实例,java,class,object,collision,Java,Class,Object,Collision,我正在研究Java中激光与怪物碰撞的包围盒碰撞。碰撞没有问题。问题是OneEye类中的矩形对象是静态的 问题1:如果游戏中有一个怪物,这没有问题,但是在我的游戏中,我会添加很多怪物类的实例。因此,如果我要添加多个怪物,我的矩形对象就不能是静态的 问题2:注意:如果矩形对象是非静态的,那么矩形的getter方法需要是非静态的 但我似乎不知道如何解决这两个问题 再一次,我的碰撞成功了!如果我在同一个类中添加不同的实例,这更像是一个代码设计缺陷。总而言之,如何引用当前类中不同类的实例我正在编写代码,而
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;
}
}
毫无疑问,你肯定需要走无静电路线。只需将rect-Rectangle变量和
getRectangle()
方法设置为非静态。如果这会导致进一步的问题,那么您需要发布这些问题的详细信息
编辑您声明:
我试过了。但是问题来了:我不能在我的Laser类中调用getRectangle方法(在我的Monster类中) 问题不是你不能在Laser类中调用
getRectangle()
,而是你不能在OneEye上调用它,。一些你很少告诉我们的事情。我假设OneEye是一个怪物变量,而不是怪物子类。如果是后者,那么您的设计就关闭了,因为您应该对类实例而不是类本身调用方法
编辑2好的,现在我看到了OneEye,我看到它是一个类,而不是一个实例。不要试图取消这些方法。相反,要么创建一个保存Monster对象的oneEye变量,要么创建一个扩展Monster的oneEye类,但无论如何都不要对类调用
getRectangle()
。在引用Monster或Monster子类对象的变量上调用它。毫无疑问,您肯定需要走非静态路线。只需将rect-Rectangle变量和getRectangle()
方法设置为非静态。如果这会导致进一步的问题,那么您需要发布这些问题的详细信息
编辑您声明:
我试过了。但是问题来了:我不能在我的Laser类中调用getRectangle方法(在我的Monster类中) 问题不是你不能在Laser类中调用
getRectangle()
,而是你不能在OneEye上调用它,。一些你很少告诉我们的事情。我假设OneEye是一个怪物变量,而不是怪物子类。如果是后者,那么您的设计就关闭了,因为您应该对类实例而不是类本身调用方法
编辑2好的,现在我看到了OneEye,我看到它是一个类,而不是一个实例。不要试图取消这些方法。相反,要么创建一个保存Monster对象的oneEye变量,要么创建一个扩展Monster的oneEye类,但无论如何都不要对类调用
getRectangle()
。对引用Monster或Monster子类对象的变量调用它。我试过了。但是问题来了:我不能在我的激光类中调用getRectangle方法(在我的怪物类中)。我编辑这篇文章。对不起,把你弄糊涂了。不要理会那是个错误的类名怪物。@Nicholas:是的,相信我,这是唯一的办法。否则,您将得到一个除了静态之外什么都没有的程序,完全缺乏继承、封装。。。利用面向对象编程的所有优点。让我们试试看。但是问题来了:我不能在我的激光类中调用getRectangle方法(在我的怪物类中)。我编辑这篇文章。对不起,把你弄糊涂了。不要理会那是个错误的类名怪物。@Nicholas:是的,相信我,这是唯一的办法。否则,您将得到一个除了静态之外什么都没有的程序,完全缺乏继承、封装。。。要利用面向对象编程的所有优点,让我们