2012-02-17 22 views

回答

4

一個更好的辦法來解決這個問題的方法是保持屏幕上存在敵人的名單,每次呈現下一個屏幕中的主渲染循環應該決定耐候它應該調用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(): 
} 

如果你真的需要有充分的敵人的AI對自己的線程上運行,那麼你需要使用Java 5的TaskExecutor的特點,與期貨概念。儘管在不同的線程上運行每個AI意味着您必須小心線程同步。

相關問題