2012-02-17 11 views
6

Pracuję nad stroną GUI gry scroller w Javie. Mam wiele rodzajów wrogów, których sztuczna inteligencja działa na zegary Swing. Jak rozumiem, zegary Swinga wymagają dużego nakładu zasobów, ale nadal chcę, aby moi wrogowie poruszali się w różnych odstępach czasu. Czy istnieje skuteczniejszy sposób prowadzenia rzeczy niż używanie innego zegara Swing dla każdego rodzaju wroga?Jaki jest najskuteczniejszy sposób na uruchamianie wielu rzeczy w różnych odstępach czasu w Javie 6

Odpowiedz

4

lepszy sposób, aby rozwiązać ten problem jest do prowadzenia listy wrogów, które istnieją na ekranie, za każdym razem, kiedy czyni następny ekran głównym renderowanie pętla powinna postanowił pogodzie powinien wywołać dowolną metodę z obiektu Enemy lub nie.

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

Jeśli naprawdę trzeba mieć każdego wroga AI uruchomić na własnym wątku, to musisz użyć funkcji TaskExecutor Java 5, z pojęciem Futures. Chociaż uruchamianie każdej sztucznej inteligencji na osobnych wątkach oznacza, że ​​musisz zachować ostrożność podczas synchronizacji wątków.

Powiązane problemy