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

Non-Static method from a static context [Comparing two sets of class instances]

我已经阅读并理解错误本身的含义以及通常如何解决它,但是我不确定在我从两个不同的实例创建两个不同的实例集的情况下如何解决 classes(比较两个矩形是否发生碰撞),如果发生碰撞 - 将一个从另一个移开。

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
            //
        }
}

(上图)这是class创建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;
}

(上图)这是class创建障碍物的实例,它应该使用下面的检查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 */;
}

(上图)class 自己制造障碍。

管理器被使用,所以当游戏重新启动时它可以按预期重新启动。

很难理解你所说的代码是什么意思。 (代码风格违规无济于事!)

但是,我想你是在问如何进行这项工作:

for(RectNPC NPC : monsters)
    if(ObstacleManager.NPCCollide(NPC.getRectangle())) { 
        //NPCCollide is the error
        //
    }

问题是 NPCCollide(呃!违反风格)是一个实例方法。这意味着您必须在实例上调用它。但是 ObstacleManager 是 class.

解决方案:创建ObstacleManagerclass的实例,并在该实例上调用实例方法。

但是,您的应用程序几乎肯定需要 ObstacleManager.

的一个且只有一个实例

解决方案(第 2 部分):阅读 "Singleton" 设计模式,并将您的 ObstacleManager 变成单例 class。

参考文献: