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类中获取列表,因为我调用它时没有这样做——现在进行测试,但目前似乎效果很好。