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
6
A
Respuesta
1
Se puede usar un temporizador normal http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Timer.html
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
- 1. ¿Cuál es la forma más eficiente de ejecutar funciones asíncronas en PHP?
- 2. ¿Cuál es la forma más eficiente de copiar de forma masiva a SQL Server desde Java?
- 3. ¿Cuál es la forma más eficiente de ordenar un NSSet?
- 4. ¿Cuál es la forma más eficiente de crear ListBuffer vacío?
- 5. ¿Cuál es la implementación Java más eficiente para un servidor de juegos en tiempo real?
- 6. ¿Cuál es una forma simple y eficiente de encontrar filas con superposiciones de intervalos de tiempo en SQL?
- 7. ¿La "encuesta larga" es la forma más eficiente de crear una aplicación web en tiempo real?
- 8. La forma más eficiente de hacer 22 construcciones diferentes
- 9. ¿Forma más eficiente de ejecutar la consulta de fecha/aaaa?
- 10. ¿Cuál es la forma más eficiente de hacer tabla de consulta en C#
- 11. ¿Cuál es la forma más eficiente de almacenar/recuperar elementos en asp.net? HttpContext.Cache
- 12. ¿Cuál es la forma más eficiente de copiar en profundidad un objeto en Ruby?
- 13. forma más eficiente de depuración en dispositivo Blackberry?
- 14. ¿Cuál es la forma más eficiente de generar las combinaciones de un conjunto en python?
- 15. C#: ¿cuál es la forma más fácil de restar tiempo?
- 16. ¿Cuál es la forma más eficiente de almacenar una matriz de enteros en una columna MySQL?
- 17. Java: ¿Cuál es la forma más eficiente de sincronizar una ArrayList?
- 18. Vector limpia cada iteración de bucle. ¿Cuál es la forma más eficiente de memoria?
- 19. ¿Cuál es la forma más eficiente de dibujar voxels (cubos) en OpenGL?
- 20. ¿Cuál es la forma más eficiente de hacer matrices de bytes inmutables en Scala?
- 21. ¿Cuál es la forma más eficiente de cortar/pegar en Visual Studio?
- 22. ¿Cuál es la forma más eficiente de encontrar el índice del bit unset izquierdo/derecho en Java?
- 23. Inicializando ... ¿cuál es más eficiente?
- 24. ¿Cuál es la forma más eficiente de implementar Haskell's foldl1 en J?
- 25. ¿Cuál es la expresión regular más eficiente?
- 26. Mejor práctica: cargar muchas cosas en la aplicación_start?
- 27. ¿Cuál es la forma más eficiente de iterar a través de una lista en python?
- 28. ¿Cuál es la forma más eficiente de mostrar marcos de video decodificados en Qt?
- 29. ¿Cuál es la forma más eficiente de encontrar una de varias subcadenas en Python?
- 30. ¿Cuál es la forma más eficiente/elegante de eliminar elementos de una matriz en MATLAB?