我尝试使用工厂设计模式稍微扩展我的敌人生成系统。
所以我有: 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
?的组合 我非常困惑。