【问题标题】:Non-Static method from a static context [Comparing two sets of class instances]来自静态上下文的非静态方法 [比较两组类实例]
【发布时间】:2017-03-26 01:59:29
【问题描述】:

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

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

(上)用于自己创建障碍的类。

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

【问题讨论】:

  • 您需要在ObstacleManager 的实例上调用NPCCollide。这取决于您是否意味着 (1) update 将该对象作为参数,(2) 将其保留为实例字段,或者 (3) 在 update 中创建对象。

标签: java static-methods non-static


【解决方案1】:

很难弄清楚你所说的代码是什么意思。 (代码风格违规没有帮助!)

但是,我认为您是在问如何使这项工作:

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

问题在于NPCCollide(啊!风格违规)是一个实例方法。这意味着您必须在实例上调用它。但是ObstacleManager 是一个类。

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

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

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

参考资料:

【讨论】:

  • 感谢您在违规的情况下仍然提供帮助,这真的很有帮助。我还想补充一点,我需要一个 getter 方法来从 npcManager 类中获取列表,因为我在没有这样做的情况下调用它 - 现在正在测试,但目前似乎效果很好。
猜你喜欢
  • 2014-11-30
  • 1970-01-01
  • 2011-11-03
  • 2011-01-17
  • 2011-06-14
  • 2012-11-12
  • 1970-01-01
  • 2012-09-23
相关资源
最近更新 更多