2012-03-01 19 views
5

Tamam, bu sorun beni en uzun süre rahatsız ediyor. Birisi bana GTA2'ninki gibi bir arabayı kontrol edebilen bir algoritma gösterip bana gösterebilir mi? 3 gün süren araştırmalardan sonra, tüm bu algoritmalar, tekerlekler ve ayrı tekerlekler üzerinde mafsal ve mafsallar kullanmak için bu algoritmaların hepsi oldu. Bu, GTA2'ninki gibi basit araba hareketini başarmanın tek yolu mu?GTA2, Araba Fiziği gibi, ancak son derece basitleştirilmiş

Algoritmayı tekerleksiz bir dikdörtgen üzerinde kullanabilmeyi ama yine de aracın sürüklenmesini sağlayabiliyorum. Mümkün mü? Bu arada, 2D oyun için Box2D'yi kullanıyorum.

Bunun gamedev için daha uygun olduğunu biliyorum, ancak bir nedenden dolayı soru gönderemiyorum.

+0

Bu gerçekten geniştir ... emin olabilirsiniz, hangi kısımda sorun yaşıyorsunuz? – iforce2d

+0

Sanırım sahip olduğum problem, her bir karede GTA2 oyununa benzeyen bir araba yapmak için Java'da basit bir algoritma uygulamak. –

+2

Tamam, sorun yaşadığın kısım ... her şey :) İhtiyacın olan bazı özel davranışları umduğumu umuyordum, örneğin aracın yana doğru hızını iptal etmenin tipik bir gereklilik olacağını düşünüyorum. Bunu görüp görmediysem merak ediyordum: http://www.iforce2d.net/b2dtut/top-down-car İlk bölüm, tek bir cisme uygulanan bazı tipik yukarıdan aşağıya araba fiziği maddelerine bakıyor. Daha sonra bu cesetlerden dördü tekerlekler olarak kullanır, ancak isterseniz tek bir vücuda araba olarak davranabilirsiniz. – iforce2d

cevap

7

Oldukça büyük bir şeye dönüşebilen basit bir cevap, farklı noktalarda giderek artan bir karmaşıklık sunarak açıklamaya çalışacağım. Temel bir fizik bilgisine sahip olacağım. (Bir klavye kullanıyorsanız, analog kontrolör varsa, oldukça can sıkıcı çok kötü)

  1. sabit dönüş yarıçapı varsayalım. Hangi yarıçapın iyi hissettirdiğini anlamak için farklı pozisyonlar denemek gibi bir şey yoktur.

  2. Başlangıçta öne baktığınız ve dönüş tuşuna bastığınızda tekerleklerin mümkün olan en yüksek düzeye döndüklerini varsayalım. Bu, temel olarak, yarıçapı sonsuzdan mümkün olan en küçük yarıçapa indirgemek anlamına gelir (tekerleklerin açısı ve yarıçap arasındaki ilişkiyi kolayca belirleyebilirsiniz). Analog bir kontrol cihazınız varsa, yarıçap analog girişin sürekli değerleri ile kontrol edilmelidir.

  3. Kuvvetler girsin! Arabaya bindiğinizde, sadece merkezcil bir hızlanma nedeniyle dönersiniz. Bu merkezcil ivme, aslında aracın yol ile sürtünmesi olan bir güçten kaynaklanır. Sürtünmeyi sabit bir şekilde ve aracınızın kütlesini büyük problemler olmadan düşünebilirsiniz, o zaman aracın hızı ve kritik yarıçap (hız verdiğinizde minimum yarıçap) arasında bir görkeminiz vardır. Merkezcil ivme a = v^2/r = Sürtünme/kütle, yani kritik yarıçap r = v^2 * kütle/Sürtünme. Aracınızı ne kadar döndürürseniz taşıyın, sürüklenecek ve maksimum olarak bu eğriyi açıklayacağınızı düşünebilirsiniz. Bu size güzel bir simülasyon vermeli, ancak yine de "kontrolü kaybetme" hissini vermemelidir. Bunun için bir sonraki noktaya bakın! circular motion

  4. Bu teori, önceki noktadakiyle tamamen aynıdır, ancak asıl şey, gerçekte sürtünmenin sabit olmamasıdır. Aslında, statik sürtünme her zaman kinetik sürtünme daha yüksek olacaktır. Pratikte, statik bir sürtünme ve (daha küçük) bir kinetik sürtünme olmalıdır. Statik sürtünmeye göre r'yi hesaplarsınız ve hızınız o r değerini elde etmek için çok büyük olduğunda (bu, sürükleneceğiniz zaman) kinetik sürtünmeyi kullanarak yeni r'yi hesaplamaya başlarsınız. Bu size kayıp kontrol hissi verecektir, ancak araç hala dönmeyecektir. Friction

  5. Spini görmek için, her bir tekerleğe uygulanan kuvvetleri (farklı tekerleklerin, aracı döndüren farklı kuvvetler altında olduğu gerçeğini) düşünmeniz ve daha ileri düzeydeki tekerleklerin tahrik tekerleği olduğu ve kinetik sürtünmenin sabit olmadığını da düşünür. Ancak bunun sizin alanınızın dışında olduğuna inanıyorum.

  6. Alternatif olarak GTA2'nin göründüğü bir şey yapabilirsiniz. Bildiğiniz an, sürüklenecek veya çok fazla sürüklenecek (burada bir eşik belirleyeceksiniz), sadece aracın kontrolünü kaybetmesini ve dönmesini programlı bir şekilde yapıyorsunuz.

Bu özel bir şüphe varsa sadece yardımcı olmanızı umarız.

1

http://www.banditracer.eu/carexample/'un araç hareketlerini göstermek için Box2D'yi kullanmanın basit bir örneğini gösterdim. http://www.banditracer.eu/, aradığınız sürüklenme hareketinin olup olmadığını görmek için gözlemleyebileceğiniz açık kaynak kodlu bir oyuna sahiptir. Kodu kontrol edebilir ve sürüklenme hareketini nasıl ele aldıklarını görebilir ve projeniz için aynısını yapabilirsiniz.

İlgili konular