Java 为更新循环插入对象的更好解决方案

Java 为更新循环插入对象的更好解决方案,java,arrays,game-engine,Java,Arrays,Game Engine,所以我是游戏开发新手,还不知道任何模式。我试图自己解决这一切,这是我一直面临的一个问题 我有一个级别叫做保龄球。它具有更新敌人列表、处理冲突等更新方法 但是,我实现将对象添加到这些列表的方式感觉是错误的。这真的没有道理 这是我的抽象类的构造函数 public Enemy (Vector2 position, int level) { this.position = position; BowLevel.enemies.add(this); state = PawnStat

所以我是游戏开发新手,还不知道任何模式。我试图自己解决这一切,这是我一直面临的一个问题

我有一个级别叫做保龄球。它具有更新敌人列表、处理冲突等更新方法

但是,我实现将对象添加到这些列表的方式感觉是错误的。这真的没有道理

这是我的抽象类的构造函数

public Enemy (Vector2 position, int level)
{
    this.position = position;
    BowLevel.enemies.add(this);
    state = PawnState.WALK;
    this.level = level;
}
有了它,我将无法将敌人添加到除此之外的任何其他级别。 但是将我的级别对象传递给所有类的每个构造函数似乎也是错误的


有没有更好的方法来解决这个问题?

如果我理解你的代码,你有一堆级别,每一个级别都是一个类,你在每一个级别中都将敌人存储为一个静态的
ArrayList
,因此你不知道如何添加到不同的级别

正确的OO方法是定义一个类
Level
,它定义了所有级别通用的方法(不是静态的)。例如,您可以:

class Level {
  private ArrayList<Enemy> enemies = new ArrayList<>();

  public void addEnemy(Enemy en) {
  }
  ...
}

“有了它,我将无法将敌人添加到除此之外的任何其他级别。”
——这没有意义。这将如何限制将另一个敌人对象添加到不同的级别?1)不要使其成为静态的,2)您只是将一个实例添加到敌人集合中,您可以添加到其他级别的其他实例。3) 最好是让游戏处理自己的敌人集合,包括添加的内容和方式,而不是让它根据敌人构造函数的副作用更改状态。@HovercraftFullOfEels类似于
敌人。添加(新敌人())
是更好的解决方案吗?哦。那可能就是我要找的。但在我看来,如果我有一个静态的敌人列表,那就容易多了,因为我不能同时加载和玩两个关卡。用静态加法。@maklas:请帮你自己一个忙,把这些静态从你的脑海中抹去。你在冒着用枪射自己脚的风险。
class BowLevel extends Level {
  public BowLevel() {
    // do something here which is level specific... 
    //perhaps create the enemies?
    addEnemy(new Enemy(....));
  }
}