我正在開發Java中的側滾屏GUI遊戲。我有許多類似AI的Swing定時器運行的敵人。據我瞭解,Swing計時器是一種資源密集型,但我仍然希望我的敵人以不同的時間間隔四處移動。對每種敵人使用不同的Swing計時器是否有更有效的方法來運行?什麼是在Java中以不同時間間隔運行很多東西的最有效方式6
6
A
回答
1
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意味着您必須小心線程同步。
相關問題
- 1. 什麼是改變對的最有效的時間間隔?
- 2. Java:以不同的時間間隔運行任務
- 3. Java最有效的方式來檢索從ZIP中間的東西
- 4. C#以不同的時間間隔運行多個任務
- 5. 在iOS中跟蹤時間的最有效/最精確的方式是什麼?
- 6. 在PHP中添加時間間隔的最佳方式是什麼?
- 7. 以設定的時間間隔執行方法的最有效方法?
- 8. 什麼是在Android中運行Cursor的最有效方式?
- 9. 在scala中運行期貨的最有效方式是什麼?
- 10. 什麼是填充時間(或時間範圍)的最有效方式?
- 11. 用很長的間隔時間輪詢數據庫,這是最好和最有效的方式?
- 12. 設置jQuery超時間隔的最佳方式是什麼?
- 13. 在XPage中長時間運行Java代碼的最佳方法是什麼?
- 14. 在特定時間間隔內運行廚師客戶端的最佳方式是什麼
- 15. 在Powershell中,生成範圍間隔的最有效方法是什麼?
- 16. 白天以不同的時間間隔運行python腳本?
- 17. 有很多不同的東西的方法
- 18. 追蹤應用程序運行時間的最有效方式
- 19. 在SQL中存儲/更新基於時間間隔的數據的最有效方法是什麼?
- 20. 在JAVA中以特定時間間隔運行特定時間的線程
- 21. 是什麼應用程序之間(「東西」)和Session(「東西」)
- 22. 以不同的時間間隔選擇多行
- 23. 在Haxe中同時運行多個Process的最佳方式是什麼?
- 24. 什麼是運行時間?
- 25. 在java程序運行之間存儲數據的最佳方式是什麼?
- 26. 什麼是測量時間最有效的方法?
- 27. setInterval函數不定時間隔運行,只是沒有時間
- 28. 如何在遊戲的不同時間高效渲染不同的東西?
- 29. SQL Server的時間間隔,以多行
- 30. 多次運行同一程序時,爲什麼執行時間有所不同?