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
6
A
cevap
1
Ekranda mevcut düşman bir listesini tutmak için bu sorunları çözmek için düzenli, saat ve alarm http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Timer.html
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
- 1. En etkili yol
- 2. 2 saatlik zaman aralıklarında ortalama çalışma için en verimli yol nedir?
- 3. Bir zaman (veya zaman aralığı) doldurmanın en etkili yolu nedir?
- 4. J Haskell'in foldl1'inin uygulanmasında en etkili yol nedir? Haskell'de
- 5. Tarih/yyyy sorgusunu çalıştırmak için daha etkili bir yol?
- 6. Vim kullanarak metinleri tekrar tekrar kaldırmak en etkili yol nedir?
- 7. Birçok üst ve alt kayıt eklemek için en hızlı yol
- 8. Bash'de Zaman Damgası Karşılaştırmasının Gerçekleştirilmesi İçin En İyi Yol nedir
- 9. İki vektörü R'de lockstep olarak sıralamak için en etkili yol?
- 10. Vektörde bir elemanı sıralamak için en etkili yol?
- 11. k-ortalamaları birçok farklı nokta için R
- 12. JTable hücresinde bir zaman sayacını görüntülemek için etkili bir yol
- 13. Vidaları işlemek için etkili bir yol RxJava
- 14. WebGL'yi öğrenmek için en iyi yol nedir?
- 15. Aşağıdaki dizeyi biçimlendirmenin en etkili yolu nedir?
- 16. Boş ListBuffer oluşturmanın en etkili yolu nedir?
- 17. NetworkX'te bir düğümü taşımak/yeniden adlandırmak için en etkili yol nedir?
- 18. 128 bit SSE vektöründen 32 bit tamsayı değerlerini yüklemek ve çıkarmak için en etkili yol nedir?
- 19. En etkili yolu
- 20. Farklı sürümleri olan eklentiler ile eklentileri çalıştırmak için önerilen yol nedir?
- 21. Opengl'de voksel (küp) çekmenin en etkili yolu nedir?
- 22. Selenium'da ekran görüntülerini farklı zaman aralıklarında nasıl çekebilir ve farklı bir yerde saklayabilirsiniz?
- 23. Temiz git sanal alanını elde etmenin en etkili yolu nedir?
- 24. Python'da bir ağacı hareket ettirmenin en etkili yolu nedir?
- 25. En etkili yolu
- 26. En etkili yolu
- 27. Bir float [] bir bayt [] dönüştürmek için en hızlı yol nedir?
- 28. Bir matrisin tersini diyagonal hesaplamak için etkili bir yol
- 29. Bu iki foreach döngüsünü yapmanın en etkili yolu nedir?
- 30. Matlabdaki bir vektörü tekrar etmek için en etkin yol