Bunu nasıl yapabileceğiniz aşağıda açıklanmıştır:
Yaklaşık hareket
Her fizik nesnesinin şu vektörlere ihtiyacı vardır:
- Konum : Nesnenin olduğu yer.
- Hız : Konumunun nasıl değiştiği.
- Hızlanma : Hızının nasıl değiştiği.
Yani, sezgisel olarak, her fizik nesnesine her karede bu tür bir şey yapmanız gerekir a
:
a.speed += a.acceleration
a.position += a.speed
Tuzaklar : Bu, Euler entegrasyon yöntemi olarak bilinir . Bu yaklaşım, küçük hızlar ve ivmeler için ve küçük zaman adımlarında daha iyidir. Bir oyunda, bu normalde doğrudur. Ancak bir nesne gerçekten hızlı bir şekilde ince bir duvara veya doğrudan başka bir hareketli nesneye doğru hareket ederse, konumu tamamen geçecek kadar büyük miktarda artırıldığında, bu nesne ile çarpışmayı atlayabilir. Hızlı hareket eden nesneleriniz varsa, bundan kurtulmak için Sürekli Çarpışma Algılama'ya ihtiyacınız olabilir .
Çarpışma
Çarpışma, bu tür bir sekansla yaklaştırılabilir:
- Tespit : İki cismin kesiştiği tespit edilmiştir.
- Çözüm : Her bir vücudun konumu, artık kesişmeyecek şekilde değiştirilir.
- Fizik : Her vücudun hızı momentum, sürtünme ve restitüsyon (zıplama) olarak değiştirilir.
Bu, zaman içinde ayrık noktalarda meydana geldiği için Ayrık Çarpışma Tespiti olarak bilinir. Her adım dikkati hak ediyor:
Adım 1: Çarpışma tespiti (İşler çarpışıyor mu?)
İçin iki çemberin : kendi merkezleri daha ayrı kendi yarı çaplarının toplamından daha olup olmadığını Hemen kontrol edin.
İçin iki dikdörtgen : Çekle kendi köşe koordinatları başka dikdörtgenin içinde olup olmadığını.
Daha karmaşık çokgenleri içeren herhangi bir şey için, başka bir sorunun konusu olan Ayırma Ekseni Teoremine ihtiyacınız olacaktır .
Tuzaklar : Dikkate almak isteyebileceğiniz diğer birçok çarpışma türü vardır . Bazıları gerçekten karmaşık: Dışbükey çokgenler birden çok kez kesişebilir !
2. Adım: Çarpışma çözünürlüğü (Bunları birbirinden ayırma.)
Bir çarpışmayı çözmek için basit bir yöntem , çarpışma algılamasından elde edilen değerleri kullanarak minimum penetrasyon yoluyla çeviri yapmaktır. Bu esasen nesnelerin mümkün olan minimum hareket mesafesiyle birbirinden ayrılmasını içerir.
Örnek olarak, dairelerden birinin yerinde sabitlendiği daire-daire çarpışmasını ele alalım. Minimum yer değiştirme vektörü, orta nokta vektörleri arasındaki farkla aynı yöne sahiptir. Uzunluğu, yarıçaplarının toplamı ile merkezler arasındaki mesafe arasındaki farktır.
Bu fikir diğer şekillere kolayca genelleme yapar.
Tuzaklar : Her iki çarpışan nesne hareket edebiliyorsa, hareketlerinin inandırıcı bir yaklaşımını elde etmek için her ikisini de toplam mesafenin bir kısmı kadar hareket ettirmeniz gerekebilir. Açıkçası farklı yönlerde hareket etmek zorunda kalacaklar.
Adım 3: Çarpışma fiziği (Diğer değişiklikler.)
Gerçekleşmeye eğilimli olan en belirgin şey, nesnelerden bir veya ikisinin yön değiştirmesidir, yani hız vektörünü döndürür. Bunu uygulamak oldukça kolaydır.
Tehlikeler : Nesneler olabilir elastik ama olabilir vermeye sistemdeki toplam enerjisi azalır ve bu durumda,. Hava direnci nedeniyle sürüklemeniz gerekebilir . Sürtünme (özellikle statik sürtünme ) uygulaması oldukça karmaşıktır .
Bazı sonuçlar
Gerçekliğin simülasyonu, simüle etmek istiyorsa katlanarak daha da zordur. Sayısız kenar vakası, akıl almaz derecede zor formüller ve sürekli büyüyen araştırma makaleleri yığınları arasında dolaşıyorsunuz.
İhtiyaçlarınız basitse veya öğrenmeye hevesliyseniz, deneyin.
İhtiyaçlarınız karmaşıksa veya matematiği sevmiyorsanız, sizin için ayrıntıları bir fizik motoru ile aydınlatın. Box2D ve Bullet oyunlarda oldukça popüler.