2012-02-17 10 views
6

Estoy trabajando en un juego de GUI de desplazamiento lateral en Java. Tengo muchos tipos de enemigos cuyas AIs funcionan con temporizadores Swing. Según entiendo, los temporizadores Swing requieren un gran número de recursos, pero aún así quiero que mis enemigos se muevan a diferentes intervalos. ¿Hay una manera más eficiente de ejecutar cosas que usar un temporizador Swing diferente para cada tipo de enemigo?¿Cuál es la forma más eficiente de ejecutar muchas cosas en diferentes intervalos de tiempo en Java 6

Respuesta

4

Una mejor manera de resolver este problema es mantener una lista de enemigos que existe en la pantalla, cada vez que hacen la siguiente pantalla de su bucle de render principal debe decidido tiempo se debe llamar a cualquiera de los métodos en el objeto Enemigo o no.

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

Si realmente necesita tener todos los enemigos AI ejecuta en su propio hilo, entonces tienes que utilizar una serie de características TaskExecutor de Java 5, con el concepto de futuros. Aunque ejecutar cada IA ​​en hilos separados significa que debe tener cuidado con la sincronización de hilos.

Cuestiones relacionadas