Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中引用当前类中不同类的实例_Java_Class_Object_Collision - Fatal编程技术网

如何在Java中引用当前类中不同类的实例

如何在Java中引用当前类中不同类的实例,java,class,object,collision,Java,Class,Object,Collision,我正在研究Java中激光与怪物碰撞的包围盒碰撞。碰撞没有问题。问题是OneEye类中的矩形对象是静态的 问题1:如果游戏中有一个怪物,这没有问题,但是在我的游戏中,我会添加很多怪物类的实例。因此,如果我要添加多个怪物,我的矩形对象就不能是静态的 问题2:注意:如果矩形对象是非静态的,那么矩形的getter方法需要是非静态的 但我似乎不知道如何解决这两个问题 再一次,我的碰撞成功了!如果我在同一个类中添加不同的实例,这更像是一个代码设计缺陷。总而言之,如何引用当前类中不同类的实例我正在编写代码,而

我正在研究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:是的,相信我,这是唯一的办法。否则,您将得到一个除了静态之外什么都没有的程序,完全缺乏继承、封装。。。要利用面向对象编程的所有优点,让我们