2D yol bulma - düzgün yollar bulma


10

Basit bir yol bulmaya çalışıyordum, ancak sonuç elde etmeyi amaçladığımdan daha az tatmin edici. Şey, Starcraft 2 gibi oyunlarda birimler her yöne hareket ederken, benim durumumdaki birimler en fazla 8 yönde (Warcraft 1 stili) hareket ediyor, çünkü bu 8 yön bir sonraki kullanılabilir düğümlere yönlendiriyorlar (bir döşemeden bir sonraki komşu döşemeye geçiyorlar) . Sonuca ulaşmak için Starcraft 2'deki gibi ne yapmalıyım? Döşeme boyutunu küçültmek mi?

http://i.stack.imgur.com/lr19c.jpg

Resimde, taş karoların yatay bir çizgisinin engel olduğunu ve bulunan yolun yeşil fayans olarak işaretlendiğini görebilirsiniz. Kırmızı çizgi ulaşmak istediğim yoldur.


Henüz uygulamak için zaman bulamadım, ancak atlama noktası arama büyük bir hayranıyım. Ancak dokümantasyon ilginçti ve iyi bir performansa sahipti.

2
İstediğiniz yoldan emin misiniz? Bunu kullanan birimler kısmen duvarlardan geçecektir. Başka bir örnekte daha görünür hale getirdim : i.imgur.com/eh4ZR.png Ve muhtemelen elde etmek istediğiniz şey şu: i.imgur.com/vFQg4.png
Markus von Broady

Haklısın, yolum kusurluydu, ama daha çok örnekleme amaçlıydı.
Kooi Nam Ng

İstediğinizi elde etmek için bir döşemede kesirli koordinatlara sahip olmanız gerekir. Bu olmadan olası bir yol işe yaramaz - kesirleri taşımak, ancak bunları göstermemek, ünitenizin düz / çapraz / düz / çapraz hareket etmesini sağlar.
Loren Pechtel

@LorenPechtel yanılıyorsunuz, bulduktan sonra yolu düzeltebilirsiniz. Ünitenin boyutlarına göre iki çizgi oluşturduğunuzda ve tile1-tile (N-1) yoldan kaldırmak istediğiniz döşemeler olduğu tile0 ve tileN arasındaki döşemelerle kesişip kesişmediklerini kontrol etmek oldukça kolaydır.
Markus von Broady

Yanıtlar:


8

İyi bir yol bulma algoritması için, A * kullanmak muhtemelen iyi bir fikir olacaktır, ancak karmaşık, verimli veya etkili bir yol arama gerektirmeyen basit bir oyun için, karakterlerin yönünü bularak bir hedefe doğru hareket etmesini sağlamak hedef yeterli olmalıdır.

Yapabileceğiniz bir 'görünürlük grafiği' (her noktadan başka hangi noktalar görünür) oluşturmak ve daha sonra grafik üzerinde A * yapmaktır. Bu işe yarar çünkü en kısa yol her zaman görünürlük grafiğinde olacaktır.

Karo boyutunu küçültmek size yardımcı olabilir.

kaynaklar

Daha fazla okuma

EDIT: @ MarkusvonBroady'nin yorumunu beğendim.

"bu aslında yol düzeltmeyle ilgilidir, bulmak değil. Resimde bulunan yol iyi görünüyor."

kaynaklar

Gönderen @MarkusvonBroady

Bir arama yaptım, aşağıdakileri buldum (bunlar size yardımcı olabilir)


1
harika bağlantılar, benden +1
lhk

2
@MarkusvonBroady, -1 için teşekkürler. Senden öğrendim. Nokta istemiyorum, daha doğruyu öğrenmek ve paylaşmak istiyorum. Tartışarak doğru olanı bulabileceğimize inanıyorum. :)
Md Mahbubur Rahman

@MarkusvonBroady, lütfen birkaç yol düzeltme algoritması kaynağını paylaşır mısınız?
Md Mahbubur Rahman

Aslında, bu cevabın OP'ye yardımcı olduğunu düşünüyorum. OP'nin gerçek düzleştirme (spline enterpolasyonu veya benzeri) istediğini değil, algoritmasının şu anda korkunç derecede optimal olmayan bir yol bulduğunu ve daha düz bir çizgiye "düzleştirilmesi" gerektiğini düşünüyorum. Hangi A * doğal olarak onun için herhangi bir ek yumuşatma olmadan bulurdu.
Sean Middleditch

A * kullanıyordum ve bence en uygun yolu buldum.
Kooi Nam Ng

0

Ham yolunun bir ucundan başlayarak, demek path[0]sen kaldırabilir, path[1]bölüm noktalarını birleştirilmesiyle oluşturulan eğer path[0]ve path[2]herhangi bir duvara kesmez. Son segmente kadar ileri gitmek daha basit bir yol sağlayacaktır.

Bu sadece yolu yumuşatmakla kalmayacak, aynı zamanda yangın örneği, düz çizginin 3 ardışık segmenti gibi bazı yararsız noktaları da kaldıracaktır.

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.