2012-02-17 17 views
6

Java'da bir yan kaydırma GUI oyunu üzerinde çalışıyorum. AI'ları Swing zamanlayıcıları kaçan birçok düşmanım var. Anladığım kadarıyla, Swing zamanlayıcıları çok yoğun kaynaklıdır, yine de düşmanlarımın farklı aralıklarla hareket etmelerini istiyorum. Her tür düşman için farklı bir Swing zamanlayıcı kullanmaktan ziyade işleri yürütmenin daha verimli bir yolu var mı?Java'da farklı zaman aralıklarında birçok şeyi çalıştırmak için en etkili yol nedir? 6

cevap

4

Daha iyi bir yol olduğunu kullanabilirsiniz, her süresi, ana hale döngü hava o karar gereken bir sonraki ekrana hale Düşman nesnesindeki yöntemlerden herhangi birini çağırmalı veya yapmamalı.

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(): 
} 

gerçekten AI kendi iş parçacığı üzerinde çalışan her düşmanı olması gerekiyorsa

o zaman Vadeli konsepti, Java 5 bir TaskExecutor özelliklerini kullanmak gerekir. Her bir AI'yi ayrı iş parçacığı üzerinde çalıştırmakla birlikte, iş parçacığı senkronizasyonuna dikkat etmeniz gerekir.

İlgili konular