Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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_Static Methods_Non Static - Fatal编程技术网

Java 来自静态上下文的非静态方法[比较两组类实例]

Java 来自静态上下文的非静态方法[比较两组类实例],java,static-methods,non-static,Java,Static Methods,Non Static,我已经阅读并理解了错误本身的含义,以及通常如何解决它,但是我不确定如何从两个不同的类中创建两组不同的实例(比较两个矩形是否发生碰撞),如果它们发生碰撞,则将其中一个移离另一个 public class NPCManager { public NPCManager(int amountNPC, int NPCGap) { // populateNPCS(); } public void update() { for(RectNPC NPC : monsters)

我已经阅读并理解了错误本身的含义,以及通常如何解决它,但是我不确定如何从两个不同的类中创建两组不同的实例(比较两个矩形是否发生碰撞),如果它们发生碰撞,则将其中一个移离另一个

public class NPCManager {

public NPCManager(int amountNPC, int NPCGap) {
    //
    populateNPCS();
}

public void update() {
    for(RectNPC NPC : monsters)
        if(ObstacleManager.NPCCollide(NPC.getRectangle())) { //NPCCollide is the error
            //
        }
}
(上图)这是创建NPC实例的类,它应该使用下面所示的方法检查每个NPC

public class ObstacleManager {

public ObstacleManager(int playerGap, int obstacleGap, int obstacleHeight, int color, int doorcolor) {

    populateObstacles();
}

public boolean NPCCollide(RectNPC NPC) {
    for(Obstacle ob : obstacles) {
        if(ob.NPCCollide(NPC))
            return true;
    }
    return false;
}
(上图)这是创建障碍物实例的类,它应该使用下面的方法检查NPC是否发生碰撞

public class Obstacle implements GameObject {

public Obstacle(int rectHeight, int color, int doorColor, int startX, int startY, int playerGap) {
    //
}

public boolean NPCCollide(RectNPC NPC) {
    /* Checks if the NPC inputted collides with the rectangles */;
}
(上图)自己制造障碍的课程


使用管理器可以在游戏重新启动时按预期重新启动。

很难理解代码的含义。(代码样式冲突没有帮助!)

然而,我想你是在问如何使这项工作:

for(RectNPC NPC : monsters)
    if(ObstacleManager.NPCCollide(NPC.getRectangle())) { 
        //NPCCollide is the error
        //
    }
问题在于
NPCCollide
(啊!风格冲突)是一种实例方法。这意味着您必须在实例上调用它。但是,
ObstacleManager
是一个类

解决方案:创建
ObstacleManager
类的实例,并对该实例调用instance方法

但是,您的应用程序几乎肯定需要一个且只有一个
ObstacleManager
实例

解决方案(第2部分):阅读“单例”设计模式,并将您的
ObstacleManager
转换为单例类

参考资料:


您需要在
ObstacleManager
的实例上调用
NPCCollide
。这取决于您是否意味着(1)
update
将该对象作为参数,(2)将其保留为实例字段,或(3)在
update
中创建该对象。感谢您在违反规则的情况下仍然提供帮助,这真的很有帮助。我还想补充一点,我需要一个getter方法来从npcManager类中获取列表,因为我调用它时没有这样做——现在进行测试,但目前似乎效果很好。