Лучший способ решить эту проблему - сохранить список врагов, которые существуют на экране, каждый раз, когда вы рендерите следующий экран, ваш основной цикл рендеринга должен решить, должен ли он вызывать любой из методов объекта Enemy или нет .
public interface Enemy {
public void doNextThing();
}
public class TimedEnemy implements Enemy {
private long lastExecute;
private Enemy enemy;
private long threshHold;
public TimedEnemy(Enemy enemy, long threshold)
{
this.lastExecute = System.currentTimeMills();
this.enemy = enemy;
this.threshold = threshold;
}
public void doNextThing()
{
long duration = System.currentTimeMills() - lastExecute;
if( duration >= threshold) {
lastExecute = System.currentTimeMills();
this.enemy.doNextThing();
}
}
}
// main Render Loop
List<Enemy> enemies = new ArrayList<Enemy>();
TimedEnemy easy = new TimedEnemy(new EasyEnemy(),1000);
TimedEnemy hard = new TimeEnemy(new HardBadGuyEnemy(),100);
TimedEnemy boss = new TimeEnemy(new VeryBadBossEnemy(),50);
enemies.add(easy);
enemies.add(hard);
enemies.add(boss);
for( Enemy enemy : enemies) {
enemy.doNextThing():
}
Если вам действительно нужно, чтобы каждый вражеский ИИ запускался в своем собственном потоке, вам нужно использовать функции TaskExecutor в Java 5 с концепцией Futures. Хотя запуск каждого ИИ в отдельных потоках означает, что вы должны быть осторожны с синхронизацией потоков.