Boğulma noktalarında kalabalıklarla başa çıkma stratejileri


9

Son zamanlarda oyun motorumu, doğru zamana dayalı çarpışma çözünürlüğüyle direksiyon davranışlarından dürtü tabanlı harekete dönüştürdüm. Bu, çok fazla sorunu çözdü (artık tünelleme yok, yay) ve simülasyonu daha kararlı hale getirdi. Ancak istikrarla birlikte yeni bir sorun ortaya çıktı.

Kapı çarpışma sorunu.

Üç top yolculuğa görüntünün altına yakın bir yerde başladı, hedefleri pembe topun durduğu yerdi. Yolda kırmızı ve yeşil toplar duvardaki tıkanma noktasında sıkıştı.

Daha önce, kayan nokta hatalarına ve yeşil ve kırmızı topları boğulma noktasından geçmeyi başarana kadar birbirine ittirmek için direksiyon davranışlarının genel istikrarsızlığına güvenebilirdim. Şimdi düzgün çarpışma çözünürlüğü ile, toplara etkiyen kuvvetler birbirini iptal eder ve bu da topların mükemmel bir şekilde sabit kalmasına neden olur.

Bu tür durumları çözmek için yaygın olarak hangi yöntemler kullanılır? Belki bir tür öncelik kuyruk sistemi işe yarayacaktır, ancak 2'den fazla nesne arasında önceliğe karar vermem gerektiğinde karmaşık hale geldiğini görebiliyorum.


Ayrıca kalabalık yönetimi ile hayal kırıklığına uğradım. Soruya "dürtü temelli hareket" ile ilgili bazı bağlantılar ekleyebilir misiniz?
Kromster

Bir dürtü sadece zorlama zamanıdır. Söylemeye çalıştığım, ayrık çarpışma tespiti yerine sürekli olarak fiziksel tabanlı bir modele geçmemdi. Direksiyon davranışları Newton'un hareket yasaları gibi şeylere gerçekten saygı duymaz, fizik simülasyonu olmaktan ziyade kuş sürülerini taklit etmek için tasarlanmıştır. Hareket için hiçbir gamedev bağım yok, gerçekten sadece lise fiziği. Ancak, Christer Ericson'un Gerçek Zamanlı Çarpışma Tespiti kitabı, sürekli çarpışma tespiti için neredeyse oyunun incilidir.
Fibbles

Yanıtlar:


3

Taşınabilir her nesneye benzersiz bir dizin atayın ve daha yüksek dizine sahip bir nesnenin daha düşük bir dizine sahip bir aracıyı taşımasını yasaklayın. Bu, 'eski' nesnelerin 'daha yeni' olanları sürüklemesine izin verir, ancak tersi olmaz ve kuyruktan daha az ek yüktür. Esas olarak, endeks bir hareket önceliği görevi görür.


1
Bunu uyguladım ve her zaman güzel olmadığını söylemek zorundayım, ancak artık birimlerin sıkışmaması durumunda çalışıyor. Bazı uyarılar: sadece aynı kütlenin hareketli nesneleri için önceliği belirlemek için dizini kullanın, büyük nesneler küçük nesneleri doğal olarak yoldan çekmelidir. Dizini yalnızca aynı ekipteki nesnelerin önceliğini belirlemek için kullanın. Bir düşman nesnesi, sadece ilk ortaya çıktığı ve bu nedenle daha büyük önceliğe sahip olduğu için bir oyuncu nesnesine taşınmaz bir duvar gibi davranmamalıdır.
Fibbles

Kitle veya takım düşünmemiştim; tweaks cevabımı düzeltmek için mantıklı bir yol gibi görünüyor.
Pikalek

2

yol bulmaya zaman ekle

İşte o zaman küpünden bahseden bir makale: http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Applications_files/coop-path-AIWisdom.pdf

resim açıklamasını buraya girin

ve bir Objective-C uygulaması: http://allseeing-i.com/ASIPathFinder

resim açıklamasını buraya girin


1
Bunu daha önce okudum ve uyguladım. Birden fazla iş parçacığı ile bile benim durumumda fazla kullanılmaz. Bir RTS oyununda, bir tarafa 500 kareden daha büyük yüzlerce hareketli ünite ve harita ızgarası olabilir. Her birim için zamana dayalı yolları hesaplama yükü çok yüksektir. Sadece eklemek için, rakkarage'ın cevabının yanlış olduğunu söylemiyorum, çok düzgün bir algoritma. Sadece yararlı olduğu durumların karmaşıklığı ile sınırlı olduğunu söylüyorum.
Lifler

ya sadece ben tam olarak anlamak ve uygulamak yerine her dönüş benim bütün yol bulma algoritması yeniden çalıştırın ama ben sonunda ben gerekebilir
Rakka Rage

0

Aslında, düzeltmen gerektiğini sanmıyorum. Oklar (tahmin edebilirim) oklar, herhangi bir küreye uygulanan kuvvet vektörlerini, ızgaradaki herhangi bir pozisyonda (muhtemelen "iki doğrusal" veya benzer şekilde veya bir şekilde sadece 0/1 olmaktan daha fazla "analog" olarak gösterir) davranış fiziksel olarak doğrudur ve iyi davranan bir çözüme sahip olduğunuz için kendinizi tebrik etmelisiniz.

İki küre, orada oturup birbirlerinden nefret ettikleri için iyi bir dengededir. Görünüşe göre, biraz sağa hareket ederlerse, sağa doğru "kuvvet oku" sağ taraftaki küreyi biraz daha fazla etkiler (ve sol taraftaki kürenin tersi; biraz daha az) ve böylece dengeye geri dönerler. Böyle olması gerekir.

Imho ne olmalıdır sabit duvar, ya da küre boyutları veya buildstones kendileri arasında başka bir şey. Bir imkansızlık yarattınız ve bu durumda doğru davranış buna göre bir kilitlenmedir (kelimeleri kötüye kullandığınız için özür dilerim, umarım onları zaten alırsınız :-)).

Bunun yerine en yakın sol / sağ kuvvet oklarını devre dışı bırakın veya simetrik olmayan ve dengelemeyi teşvik etmeyen başka bir şekilde düzenleyin ?

Yapay olarak düzeltmek için kötü bir düzeltme olacağını düşünüyorum ... çok erken kıllı olur.


Bu soruya cevap vermiyor. Motivasyonunuzu anlıyorum, ama sonuçta soru durumla nasıl başa çıkılacağı. Oyun niyetlerini bilmiyoruz, bu yüzden bunun bir sorun olup olmadığına karar vermek Fibbles'a kalmış. Duvarın değiştirilmesi, boğum noktasının amacını değiştirebilir. Soru, çözülebilecek geçerli bir sorundur.
Felsir

Cevabım temelde: (yeniden) güçleri düzenleyin veya senaryoda başka bir şey yeniden düzenleyin, ancak fizik çözücüyü karıştırmayın (" Imho, sabit olması gereken duvar veya küre boyutları veya yapı taşları arasında başka bir şey) kendileri. "). Soru " Bu gibi durumları çözmek için hangi yöntemler yaygın olarak kullanılmaktadır?" Benim A'mın "yaygın olarak kullanılan bir yöntem" olduğunu ve soruna bir çözüm olduğunu düşünüyorum. Örneğin, ortam bunun olmasını istiyorsa, çevrimiçi minigolf oyunları (Q'nun hatırlattığı çok şey var) topları boğar. Düzensiz fizik kötü bir yoldur, imo.
Stormwind

Fizik çözücünün temas halinde kalması gerektiğine katılıyorum. Soru, kürelerin hedefi araması gerektiğini, temel olarak ajanların davranışlarını nasıl değiştireceğini (böylece fizik veya seviye düzenini değil) belirtir. Seviye düzenini değiştirmek bu durumu çözebilir - ancak farklı bir düzende ortaya çıkar. Dolayısıyla soru verdiğiniz minigolf örneğinden farklıdır, çünkü bu örnekte soru özellikle bir kilitlenmeden kaçınmaktır.
Felsir

Gördüğünüz gibi, cevaptaki güçlerin yeniden düzenlenmesini öneriyorum. Bundan sonra biraz geride kalmış gibi görünüyor :-).
Stormwind

Duvarları yeniden düzenlemek veya küre boyutlarını değiştirmek benim durumumda geçerli değildir, ancak başkalarında olabilir. Ekran görüntüsü, bir RTS motorunun hata ayıklama modundan. Birçok farklı birim boyutu vardır ve duvarlar oyuncu tarafından isteğe göre yerleştirilebilir. Gördüğünüz oklar Hızlı Akış Alanları algoritmam tarafından oluşturulur. Bunlar hareketli birimlerin hareket yönünü etkilemek için kullanılan normalize edilmiş vektörlerdir. Vektörlerin uzunluğunu değiştirmek mümkün değildir, çünkü gruptaki tüm hareketli birimler aynı Akış Alanını paylaşır.
Lifler
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.