0

我尝试使用工厂设计模式稍微扩展我的敌人生成系统。

所以我有: Enemy (abstract): EnemyTyp eA, B, C, D... 等等,每一个都扩展 Enemy。

我有这个:(有效)

public void spawnEnemy(int type, int amount) {

    Enemy theEnemy =  null;
    for (int i=1; i<amount+1; i++ ) {
        theEnemy = enemyFactory.makeEnemy(type, 0-i*40, 400);
        aliens.add(theEnemy);
        health.add(2);
        System.out.println("Attack Message Recieved "+i);
    }
    repaint();
}

但我似乎无法让碰撞检测工作。

public void checkCollisions() {  
           Rectangle r3 = player.getBounds();
           ArrayList ms = player.getMissiles();
           for (int i = 0; i < ms.size(); i++) {
                Missile m = (Missile) ms.get(i);
                Rectangle r1 = m.getBounds();

                for (int j = 0; j<aliens.size(); j++) {
                    Enemy a = (Enemy) aliens.get(j);
                    Rectangle r2 = a.getBounds();

                    if (r1.intersects(r2)) {
                        m.setVisible(false);
                        a.setHealth(-1);
                        if(a.getHealth()==0){
                        a.setVisible(false);
                        }

                }}


            }
        }

我相信这是因为我把它变成了一个敌人(抽象),这就是为什么我没有碰撞。所以当我把这个项目从 ArrayList 中取出时,我怎样才能取出我最初放入的确切的敌人类型方法spawnEnemy()?使用theEnemy变量和instanceOf?的组合 我非常困惑。

4

0 回答 0