我的游戏有一个名为
在我的
敌人(Enemy)
的类,它继承了演员(Actor)
。此外,我还有一个敌人影响器(EnemyAffector)
类,其中有一些影响敌人(Enemies)
的方法,大致如下:class EnemyAffector {
public void affect(Enemy enemy) { ... }
}
在我的
Stage
中的act
方法中,我希望遍历所有的Enemies
并对它们应用EnemyAffector
。显而易见的方法是通过强制类型转换:@Override
public void act() {
super.act();
for (Actor actor: getActors()) {
if (actor instanceof Enemy) {
enemyAffector.affect((Enemy)actor);
}
}
...
}
然而,传说中使用instanceof
应该避免。因此,我考虑保留一个额外的Array
,将Enemies
添加到其中,当它们被添加到Stage
时,即通过重载我的Stage
添加另一个addActor
方法:
public void addActor(EnemyProjectile pEnemyProjectile) { // add to Enemy Array }
所以现在我的act
方法看起来像这样:
@Override
public void act() {
super.act();
for (Enemy enemy: enemyArray) {
enemyAffector.affect(enemy);
}
...
}
太好了!没有 instanceof
了!
然而,这种解决方案的问题在于我总是需要在 Enemy
Array
和标准的 Actor
Array
之间进行同步,因为在 Enemy
Array
中的 Enemies
可能已经从 Stage
中移除。
我的问题是,有没有不同、更简洁的方法可以在这里采取?
instanceof
敌人(具有 2 条生命或电影式“死亡对话”原因?),他应该知道自己应该创建一个新的解决方案 - 或者如果他最终希望为其他对象执行不同的操作(*单独的instanceof
用于“Player”、“AlliedNPC”等)- 在开始时这样做 可能 会导致“instanceof”的不受欢迎(混乱的代码),但如果经过深思熟虑,它可能是无害的。 - DoubleDoubleinstanceof
是最简单且最好的解决方案。 - Tenfour04Actors
会从Stage
中移除自己:actor.remove()
。因此,在Stage
中,我需要手动检查哪些Actors
仍然在Stage
中。 - asherbret