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



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

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 类的实例,并在该实例上调用实例方法。

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

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

引用:

  • https://en.wikipedia.org/wiki/Singleton_pattern

最新更新