2016-12-24 46 views
0

所以我对游戏开发并不熟悉,现在还不知道任何模式。试图自己解决这一切,这是我坚持的一个问题。为更新循环插入对象的更好的解决方案

我有这个级别叫BowLevel。它有更新敌人列表,处理碰撞等的更新方法。

但是,我实现添加对象到这些列表的方式感觉不对。它只是没有意义。

这里是我的抽象类Enemy

public Enemy (Vector2 position, int level) 
{ 
    this.position = position; 
    BowLevel.enemies.add(this); 
    state = PawnState.WALK; 
    this.level = level; 
} 

有了这个构造我不会能够以一敌添加到这以外的任何其他级别。 但是,将我的关卡对象传递给所有类的每个构造函数似乎都是错误的。

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

+0

'“有了,我将无法以一敌添加到这以外的任何其他级别。” ' - 这没有意义。这将如何限制增加另一个敌人对象到不同的水平? –

+0

1)不要让它变成静态的,2)你只是将一个实例添加到敌人集合中,你可以添加其他层次的其他实例。 3)如果你有游戏处理自己的敌人集合,包括增加什么以及如何增加,而不是基于敌人构造函数的副作用改变状态,那么这可能是最好的。 –

+0

@HovercraftFullOfEels就像'enemies.add(新敌人())'是一个更好的解决方案? – maklas

回答

0

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

正确OO方法是定义一个类Level,其常用的方法定义了所有的水平(而不是作为静态)。例如,你可以有:

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

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

现在您BowLevel类看起来是这样的:

class BowLevel extends Level { 
    public BowLevel() { 
    // do something here which is level specific... 
    //perhaps create the enemies? 
    addEnemy(new Enemy(....)); 
    } 
} 
+0

哦。这可能是我一直在寻找的。但是在我看来,如果我拥有静态的敌人列表,那么它会更容易,因为我不能同时加载和播放2个关卡。并用静态addEnemy方法。 – maklas

+0

@maklas:请为自己做个忙,让这些静态内容脱离你的想法。使用它们可能会导致自己在脚下发作。 –

相关问题