我尝试使用工厂设计模式扩展我的敌人产卵系统。
所以我有:Enemy(摘要):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
的组合?我非常困惑。