Pürüzsüz bir yol izleyerek


9

Şu anda düşmanların takip ettiği statik, önceden belirlenmiş bir şeritle 2d'lik bir kule savunma oyunu yapıyorum (yani kuleler yolu engelleyemiyor ve yol bulmaya çalıştığım sorun değil ).

Birimlerin bu şeridi düzgün bir şekilde takip etmelerini sağlamaya çalışıyorum . Bunun nasıl yapılacağı hakkında iki kaba fikrim var, ancak uygulanması daha kolay olan / daha standart teknik olan bazı girdileri çok isterim. Ya da tabii ki düşünmediğim tamamen farklı bir yol varsa, bunu da öğrenmek isterim.

Yol Noktaları: İlk fikrim, yolu bir dizi sabit kodlu yol noktası olarak tanımlamaktı. Birimler sonra (örneğin temel "aramaya" direksiyon algoritmasını kullanmak istiyorsunuz bu arda yol boyunca her yol noktasına taşımak için bir tane). Ancak, birimlerin takip etmelerini istediğim şeritten çok fazla sapmalarını engellemenin zor olup olmadığını merak ettim. Acaba yeterince keskin bir şekilde dönememe, onların istenen şeritten "kaymasına" neden olabilir mi? Sanırım nispeten güçlü bir direksiyon kuvvetinin uygulanmasına izin vererek bunu önleyebilirim?

Bezier Eğrileri: Düşündüğüm ikinci çözüm yolu bir bezier eğrisi ile tanımlamak ve her seferinde adım eğri boyunca noktayı ünitenin geçerli konumundan uzakta (dt * hız) hesaplamaktır. Bu tekniğin, birimlerin izleyeceği yolu kesin olarak tanımlamayı çok daha kolay hale getireceğinden şüpheleniyorum, ancak bunu tam olarak nasıl uygulayacağımı bilmiyorum. Herhangi bir öneri?

Ayrıca, bu kimsenin cevaplarını değiştirmeyecek, ancak birimler de yol boyunca sabit bir hızda seyahat edebilmelidir. Ayrıca, bu oyunu pyglet framework kullanarak python programlıyorum.

Soruyla ilgili herhangi bir şey net değilse lütfen bana bildirin.

Düzenleme: Ayrıca ne pahasına olursa olsun, ben tür Krallık Rush düşman hareket davranışını çoğaltmaya çalışıyorum .


İlgili: gamasutra.com/view/feature/131505/… Karolara göre ne tür bir birim yoğunluk / boyut kullanıyorsunuz?
maymun

Bu makaleye bir göz atacağım! Aslında fayans kullanmıyorum, sadece pozisyon belirlemek için sürekli koordinatlar. Oynatıcının birimlerin nereye hareket edeceğini gösteren statik bir arka plan görüntüsü olacaktır.
Pwnosaurus

Ben de buldum. gamedev.stackexchange.com/questions/26543/… A * ızgara olmayan haritalarda çalışır. Krallıkta benzer şekilde kavisli bir düğüm yolu olabilir.
maymun

Düşmanların yolu terk etmelerine ve geri dönmelerine neden olabilecek bir şey var mı ? Soruyorum çünkü Bezier-eğrisi teklifiniz olmadığını gösteriyor, bu durumda tüm yolla ilgili rastgele verileri önceden hesaplayamamanız için hiçbir neden yok ve "AI" mantığına gerek yok.
Kevin Reid

Yanıtlar:


8

Sizi Craig Reynolds'un Otonom Karakterler için Yönlendirme Davranışları hakkındaki ünlü makalesiyle tanıştırmama izin verin . Eğer okumadıysanız, bu tür problemleri düşünmenize yardımcı olacaktır, özellikle yol bulma bölümüne bakınız .

resim açıklamasını buraya girin

Reynolds'un makalesi, çevrede hayat benzeri, doğaçlama navigasyon üretmek için bir araya gelen basit güçleri kullanabilmenizdir. Hareketler, yol planlamasına veya küresel hesaplamalara dayanmaz, bunun yerine komşuların kuvvetleri gibi, anlaşılmasını ve uygulanmasını kolaylaştıran, ancak yine de çok karmaşık hareket kalıpları üreten yerel bilgileri kullanır.

Yaklaşımın güzelliği, birkaç davranışı bir araya getirebilmenizdir. Örneğin, karakterleriniz ağırlıklı bir toplam olarak birleştirilebilen bir yol bulma davranışının yanı sıra bir ayırma davranışına da (çok fazla topaklanmalarını önlemek için) sahip olabilir.

Yönlendirme davranışlarını kullanmanın diğer bir yararı, çeşitli dillerde (örneğin, opensteer ) mevcut çok sayıda açık kaynak uygulamasının olmasıdır .


GÜNCELLEME: Kingdom Rush'a bir göz attım ve bence ne demek istediğini "sorunsuz" olarak yanlış anlamış olabilirim. Daha gerçekçi demek için aldım, ama sanırım peşinde olduğun şey karakterlerin tren rayında olduğu gibi. Ayrıca, daha dikkatli bir şekilde okurken, gereksinimlerinizden birinin "birimlerin yol boyunca sabit bir hızda seyahat edebilmesi gerektiği" olduğunu görüyorum. Direksiyon davranışları size sabit bir hareket hızı vermeyecektir, ancak ara noktalarla birleştirilmiş basit yol bulma olacaktır. (Yani, ara noktaya ulaşmak için "arama" davranışını kullanmayın, bunun yerine yön vektörünü belirleyin ve ünitenin tam olarak bu ara noktaya hareket etmesini sağlayın.) Rotayı düzeltmek için daha fazla ara nokta kullanın.


2

Bu Gamasutra makalesindeki çözüm aradığınız şey olabilir. Temel fikir, ışınları mevcut ara noktanızın iki adım ilerisinde olan bir ara noktaya ışınlamaktır; ışını bir hücre uzunluğunun bir kısmını "adımlamak" ve ışın kontrolünün her "adımında" oyuncunuzun çarpışma hacminin herhangi bir şeyle çarpışıp çarpışmadığını görmek için ışının basamaklı konumunda. Işın iki adım ilerideki ara noktaya kadar giderse, ara noktadan kurtulabilirsiniz. daha sonra aynı hedefe "hedef" yol noktasına kadar devam edebilirsiniz ... eğer yolunuz hedefe düz bir çizgi ile ulaşılabiliyorsa, hedefe düz bir çizgi karakterinizin alacağı rotadır. işte makale: http://www.gamasutra.com/view/feature/131505/toward_more_realistic_pathfinding.

Ayrıca dönüş yarıçapı ve daha doğal tornalama davranışları ve benzeri hakkında harika şeyler içerir ...

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.