Düşmanların aynı noktada durmasını engellemenin basit bir yolu var mı?


24

Yani: yukarıdan aşağıya oyun, düşmanlarım oyuncuları kovalar, belli bir mesafeye indiklerinde hareketsiz durur ve ateş ederler. Eğer hepsi aynı yönden geliyorsa, hepsi aynı noktada durur (yani birbirlerinin içinde "durur"), çünkü şu anda düşmanlar arasında çarpışma tespiti yapmıyorum - birbirlerini geçmekte özgürler.

Bunun basit bir yolu nedir? Ya bir çarpışma algılama şekli ya da bir AI?


1
Kendinizi bir düşmanla sınırlayın. : P
Kylotan

Yanıtlar:


18

Çarpışma algılamasına ihtiyacınız yok, ancak düşmanlarınıza biraz zeka vermeniz ve birbirlerine kaçmaktan kaçınmaları gerekecek. Bu olmadan çarpışma tespiti sadece düşmanlarınızın aptal görünmesini sağlar - insanlar birbirlerinden kaçınırlar, genellikle çarpışmazlar.

Bazı basit davranışlar için "akın" konusuna bakın.

Temel fikir, işlerin oyuncuya doğru yönelmesi gerektiği, ancak yakın bir engelden (birbirlerine, duvarlara, bu tür şeylerden) uzak durması gerektiğidir.


6
Buna ayrıca boids denir. Burada sınırları çevreleyen basit kuralları okuyun: en.wikipedia.org/wiki/Boids Bu kısıtlamaları uygulamak çok önemsiz olmalıdır.
Nailer

12

Boids gibi akın etme davranışları konusunda kendinize ilham verebilirsiniz .

Bunlar, doğru şekilde uygulanan, çok tatmin edici ve "karmaşık görünümlü" davranışlarla sonuçlanan 3-4 çok basit kurallara dayanma eğilimindedir.

Senin durumunda, böyle bir şeyi deneyebilirsin:

  • Ayırma (düşmanlar arasında minimum yarıçap)
  • Uyum (yani gruplar halinde seyahat ederler)
  • Hizalama (aynı yönde hareket etme eğilimindedirler)
  • Hedeflendi (oyuncuya doğru hareket etme eğiliminde olmalılar)

Bu neredeyse JasonD'ın cevabının basit bir kopyası. Yemin ederim göndermeden önce bakmadım.
egarcia


3

Sen kontrol etmek isteyebilirsiniz işbirlikçi difüzyon (burada büyük animasyonlar) ya da bazı diğer tür antiobject desen hareketi için. Kendi içinde difüzyon algoritması düşmanların üzerinden geçmesini engellemese de, olası veya imkansız hale getirmek için ek kısıtlamalar ekleyebilirsiniz.


Tam açıklama: İşbirlikçi difüzyon bağlantısını burada GD'de bir yerde bulduğuma eminim, ama benim için hayatım boyunca şu anki ifadeyi bulamıyorum. Oldukça bir keşif oldu. =)
Yalın

Bu süper harika ama ihtiyacımdan biraz daha fazla karmaşıklık. Teknik incelemeyi yine de okuyacak ancak daha basit bir çözüm uygulamayı başardı.
Iain

2

Ya diğer birimler arasında dolaşmama izin vermezseniz? Bana öyle geliyor ki er ya da geç ihtiyacın olacak. Geçerli yol bir birim tarafından engellendiğinde, dolaşmak için yolu ayarlayın.


2

Craig Reynold'un web sitesinde yönlendirme ve akın etme davranışları için bazı referanslar var . Uygulamaları nispeten basittir ancak bazı güzel acil davranışlar üretebilirler.


Bu aslında diğer 2 ile aynı cevap, ancak bağlantı için + 1 - Bu web sitesi gerçekten iyi bir referans.
AShelly

1

Diğer tüm cevaplar daha iyi bir sonuç verir, ancak tam gruplandırmanın engellenmesinin en ucuz (?) Yolu, nesnelerin genel bir blob grubunda biraz etrafa sıçraması için orijinal hesaplanmış hareket vektörünün belki de% 25'i olan rastgele bir vektör eklemektir. . Her şeyi birbirinden tamamen uzak tutmayacak, ama ne yapmaya çalıştığınıza bağlı olarak, bunun yeterli olabileceğini gördüm. Etraflarında daireler çizerseniz, nesneler hala bu yöntemle gruplanabilir, ancak zamanla yayılma eğilimindedirler.

İşte bu yöntemi gösteren birkaç yıl önce yaptığım küçük bir oyun izni: http://deleter.phatcode.net/index.php?page=projects&p=4



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.