Hareket etme / engellerden kaçınma


12

Bir engel (kırmızı) koyabileceğiniz bir "oyun" yazmak istiyorum ve sonra siyah nokta bundan kaçınmaya ve yeşil hedefe ulaşmaya çalışıyor.
Bunu önlemek için çok kolay bir yol kullanıyorum, siyah nokta kırmızıya yakınsa, yönünü değiştirir ve bir süre hareket eder, sonra yeşil noktaya ilerler.
"Gerçekçi olmayan" yol

Bilgisayar kontrollü "oynatıcı" için nasıl "düzgün" bir yol oluşturabilirim?
Düzenleme: Düzlük değil ana nokta, ama kırmızı engelleme "duvar" önlemek ve içine çökmesine ve sonra önlemek.

Temelde 3 puanım varsa nasıl bir yol bulma algoritması uygulayabilirim?
(Birden fazla engel koyabilirseniz, işleri daha karmaşık hale getiren ne olurdu?)
Yumuşak yol

Yanıtlar:


9

Çok yaygın ve genel bir yaklaşım, dünya alanınızı ızgaralara ayırmak ve A * gibi algoritmalar kullanmaktır.

Bu bağlantı , A * algoritmasını anlamaya ve uygulamaya başlamama yardımcı oldu.

Düzenle :

Aklıma gelen daha basit bir düşünce ... dünyayı ızgara hücrelerine dönüştürdüğünüzde. Her zaman, siyah noktanın yeşil noktaya manhattan mesafesini takip etmesini sağlayın. Ardından, her hücreye ağırlık atayabilirsiniz. Engeller ızgara hücresi üzerinde yüksek bir ağırlığa sahip olabilir ve serbestçe hareket edebilir 0 diyelim. Manhattan mesafesi boyunca hareket ettikçe, her hareket için bir sonraki hücrenin ağırlığının mevcut hücrenin ağırlığından daha yüksek olup olmadığını kontrol edin. Daha yüksekse, bitişik hücrenin ağırlığını kontrol edin ve ardından devam edin.

Bu yardımcı olur umarım


Bu A * algoritması makalesi aradığım şey gibi görünüyor, ama ne yazık ki hala bilmediğim şey "dünyamı" ızgaralara nasıl bölebileceğidir: S
kullanıcı

Gerçekten bağlıdır. Düşünce: dünyanızı 32 x 32'lik bir ızgaraya bölün ve daha sonra bir 2D dizideki konumları temsil edin. Örneğin, sizin durumunuzda: kırmızı nokta 120, 120 pikseldir (veya 120/32 x 120/32: 3.75 x 3.75) 3.75 x 3.75 dünya ızgarasında (veya 2B dizide) bir konumu temsil eder. Diziler tamsayılarla dizine eklendiğinden, yalnızca tamsayı kısmını istiyorsunuz. Böylece, kırmızı nokta 3 x 3 olur. Umarım bu yardımcı olur
brainydexter

18

Direksiyon davranışları hemen hemen bu problem seti için tasarlanmıştır.

http://www.red3d.com/cwr/steer/

Temel olarak engellerden kaçınma davranışını, muhtemelen arama veya takip etme davranışıyla birleştirirsiniz. Bu sayfada, farklı davranışlar ve yaptıklarıyla ilgili bir sürü java animasyonu var. Direksiyon davranışlarının birkaç açık kaynak uygulaması vardır. Işte bir tane.


Direksiyon davranışları bunun için mükemmeldir.
tenpn

2

Denemesi kolay bir şey, siyah noktanın ötesine geçen ve ilk görüntünüzdeki yolu yürüten görünmez bir noktaya sahip olmaktır. Ardından siyah nokta, görünmeyen noktayı arkadan küçük bir mesafede takip eder.
Bu işi iyi sonuçlarla gördüm ama elbette ihtiyaçlarınızı karşılamayabilir.

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.