Daha fazla çarpışma oluşturmadan çarpışan nesneleri ayırma


11

Tüm nesneleri taşıdığım ve çarpışma olup olmadığını kontrol ettiğim basit bir ayrık çarpışma algılama sistemi kullandığımı varsayalım. Herhangi bir çarpışan nesnenin ayrılmasını (elbette) ve uygun yanıt hızlarını (sıçrama, slayt, durdurma, vb.) Atanmasını istiyorum.

Bir çift çarpışan nesneye sahip olduğumda, bunlardan birini veya her ikisini de diğer nesnelerle çarpışmadan bitirmeden nasıl ayırabilirim?

Yanıtlar:


8

Bu genel olarak çözülmesi kolay bir sorun değildir. Bir fizik motorunda, kontraint çözücü tarafından ele alınacaktır. Birçok farklı kısıtlayıcı türü vardır, ancak anlaşılması en kolay yollardan biri sıralı bir dürtü çözücüdür.

Erin Catto, daha önceki birkaç GDC'de sıralı bir dürtü çözücü hakkında güzel bir açıklama yaptı, Box2D indirme sayfasından indirilebilir , örneğin GDC 2009'a bakın.


Bunu merak ediyorum. Çarpışma tespiti ve çözümü için ne kadar yaygın olduğu düşünüldüğünde, en azından arcade ve aksiyon oyunları için uygun basit bir çözünürlük algoritması olduğunu varsayıyorum.
AJM

2
Pek sayılmaz. Eski günlerde (SNES vb.), Oyun tasarımı değişiklikleri veya uzlaşmaları ile böyle yuvarlak konular var. Örneğin. Süper Mario'da, oyuncu vurulduğunda, Mario ikinci çarpışmaları atlamak için birkaç saniye yenilmez olacaktı. Double Dragon'da, geriye düşme animasyonu bitene kadar oyuncu için çarpışmalar yok sayılır.
yaustar

@yaustar Aslında Mario'nun düşmanlarla çarpışması yok. Hit kutusu üst üste geldiğinde hasar alır.
Kış

3

Bunun olmasını engellemenin tek yolu ilk etapta penetrasyonu önlemektir. Bir nesneyi taşımadan önce yasal bir hamle olduğundan emin olursunuz. Bunun, iki nesnenin birbirine geçmesini önlemek için nesnelerinizi teker teker hareket ettirmeniz gerektiği anlamına geldiğini unutmayın.

Herhangi bir penetrasyon olmazsa, herhangi bir pozisyonu sıfırlamanız gerekmez ve bu nedenle herhangi bir ikincil penetrasyonu tetiklemezsiniz.


2

Genelde yaptığım şey şudur:

Nesneleri ayırdığınızda ve daha fazla çarpışma ile sonuçlandığınızda, maksimum adım sayısına ulaşılana veya nesneler önceden tanımlanmış bir eşikten daha az nüfuz edene kadar tekrarlayın.


Bu son derece dengesiz. Oyununuzdaki FPS, oyuncu hafif nesneyi iterek karışıklık yarattığında yükselebilir. Bir sonraki kareyi çözmek daha iyi olurdu.
Kış
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.