2012-04-12 30 views
5

Javascript'te bir kule savunma oyunu oluşturmaya çalışıyorum.Toplu astar yol bulma

sorun i (Oldukça iyi olduğuna inanıyorum) bir ikili yığını kullanır http://www.briangrinstead.com/blog/astar-search-algorithm-in-javascript: Ben astar bu web sitesinden kod kullanıyorum

Her yol bulma dan iyi ayrı oluyor ..

Sahip olmak, insanların "saldırganların" yolunu engellemelerine izin vermek istiyorum. Bu, her "saldırganın" kendi başına çıkış yolunu bulabilmesi gerektiği anlamına gelir (birisi tek bir "saldırganı" kesebileceğinden ve çıkışa kendi yolunu bulması gerektiğinden). Şimdi 5/6 saldırganları herhangi bir sorun olmadan bir anda yol alabilirler. Ancak yolun 10'dan fazla saldırganın engellendiğini söyleyin, bunların 10'unun her ikisi de, FPS'yi saniyede 1/2'ye düşüren aynı zamanda kendi pathfinding komut dosyasını da tetiklemelidir.

Bu, herkesin çok zaman geçmesine yol açan çok fazla varlığı olan herkes için ortak bir sorun olmalı, bu yüzden benim yaklaşımımdan daha iyi bir yol olması gerektiğini hayal ediyorum.

Sorularım: Toplu yol bulma algoritmasını çoklu "botlara" en verimli şekilde uygulamanın en iyi yolu nedir?

sayesinde

James

+1

, doğrusal-zaman alır), böylece uygulama optimal olmaktan uzaktır. –

+0

Biraz hızlandırıp hızlandıramayacağımı göreceğim. Ama bence daha verimli bir yol bulmama rağmen, botları denemem ve yollarını bulursam, yavaş kareler ile sonuçlanacağım. En iyi bahse girmeye başlıyorum. her bir pasajın takip edilebilmesi için botlar .. – james

+1

Eğer kulenin savunması gibi bir şey varsa, kabaca ekran değerinde bir haritaya ve karmaşık toplamalara (yani botlar birbirleriyle veya diğer hareketli nesnelerle çarpışmazsa) Bunu ayrı ayrı ele alırsınız) o zaman evet tüm haritanın yollarının hesaplanması en iyi olurdu.Aslında, muhtemelen tüm kareyi tüm kareyi yeniden hesaplamanız gerekmeyecektir. Bir algoritma oluşturmaya dikkat ederseniz, hangi düğümlerin bir kullanıcı değişikliğinden etkilendiğini belirleyebilir ve yalnızca bu düğümlerden 'yukarı akış' değerini yeniden hesaplayabilirsiniz. Kulağa ilginç geliyor! – Tim

cevap

2
Kullanım Anti-nesneleri

, bu afaik, ucuz yol bulmanın almak için tek yoldur: http://www.cs.colorado.edu/~ralex/papers/PDF/OOPSLA06antiobjects.pdf

Karşıtı nesne temelde yerine botların sahip olduğu anlamına bireysel ai, oyun haritanıza bağlı bir "swarm ai" olacak.


P.S. .: Burada genel olarak yol bulma konusunda başka bağlantı (mevcut muhtemelen en iyi online başvuru) geçerli: http://theory.stanford.edu/~amitp/GameProgramming/index.html

+0

Kaynak için teşekkürler biraz sonra bir göz atacağım. Her ne kadar söylediklerinden olsa da, haritanın tamamını bulmanın daha mantıklı geldiği ve botların takip ettiği her "blok" üzerinde bir yön belirleyebileceği gibi .. hmmm – james

0

Sadece sonucunu önbelleğe.

Yolu bir karma tablosunda (nesne) değer olarak depolayın, her düğüme bir UUID verin, benzersiz bir karma tablo anahtarı oluşturmak için UUID'leri birleştirin ve yolu ekleyin.

Eğer karma tablosu geri yolunu aldığınızda, yolu yürümek ve hala geçerli olup olmadığını değilse, bkz yeniden hesaplanması ve geri yenisini takın.

o yapabilirsiniz birçok optimizasyon vardır do :)

C69 sürüsü AI veya kovan zihni akla gelen Dediğim gibi: P bir karma tablo ile (sabit zaman ayırdığınız gerekirken o kodda `findGraphNode` benziyor