2D Halat Çarpışma Tespiti


13

Aşağıdaki youtube videosunda olduğu gibi nesnelerle çarpışabilecek bir ip oluşturmak istiyorum:

2D Oyun Fiziği İpi

Noktaları kullanan ve bu noktaları çizgilerle birleştiren verlet entegrasyonunu uyguladığınızı düşünüyorum. Videoda efekti elde etmek için ne tür bir çarpışma tespitini uygulayacağınızı anlamaya çalışıyorum.

Her noktaya biraz cd yapmanız gerektiğini düşünüyorum. Box2D'yi kullanmak istiyorum, bu yüzden her noktayı sert bir vücut çalışması yapacağını merak ediyorum? Herhangi bir tavsiye mutluluk duyacağız.


1
Bağlantınızdaki videoyu dikkatlice izlerseniz, simüle edilen "ipin" aslında bir zincir olduğu, yani sürekli esnek bir ilkelden ziyade bir hatta bağlı çok sayıda esnek olmayan segment olduğu açıktır. Bu, ip küçük yuvarlak engelin etrafına sarıldığında en belirgindir; köşelerin etrafında döndüğünü görebilirsiniz. Bir zincirin simüle edilmesi, sürekli bir ipten çok, çok daha kolaydır; her bağlantı sadece bir çarpışma ilkelidir ve birbirlerine kalıcı olarak bağlıdır. Daha ikna edici davranışlar için, her bağlantıyı tamamen esnek değil, çok sert bir yay haline getirin.
Paul Z

Yanıtlar:


6

Box2D kullandığınız için, bir dizi dikdörtgen oluşturabilir ve bunlara katılmak için Box2D'nin eklemlerini kullanabilirsiniz. Orada ipin var.

Köşelerin bükülmüş bir ipin dışına çıkmasını önlemek için iki seçenek hayal edebiliyorum:

  1. Halat segmentlerinize yuvarlak uçlar verin (böylece artık dikdörtgen olmayacaklar)
  2. Bu ipin kendisini görünmez hale getirin ve sadece fizik için kullanın. Her karedeki eklemlerin konumlarını alın ve bunu oyuncunun göreceği anında bir ip çizmek için kullanın .

Uyarı: Bunu kendim hiç denemedim, ancak gönderdiğiniz video neredeyse aynı şeyi kılık değiştirmiş olarak gösterdiğinde, birleştirilmiş dikdörtgenlerin nasıl başarısız olabileceğini göremiyorum.

Edit: Ben sadece PaulZ gördüm ve aynı şeyi fark ettim. Soruyla ilgili yorumunu da okuyun.


2

Hızlı bir Google bunu buraya attı . Basit bir ip uygulamak için Box2D kullanarak bir demo, açıklama ve kod (Flash'ta). Halat kendisiyle ve sahnenin üstündeki blokla çarpışır.


0

İşte yapacağım şey, çizgideki her bir noktayı bir daire haline getirin, dairelerin üst üste bindiği kadar puan verin. Standart çarpışmadan ziyade her noktayı komşusuna bağlayın, bu ip, puanların birbirinden sabit bir mesafede kalmasını sağlamalıdır.

Box2D bilmiyorum, ama gerekli işlevsellik olduğunu tahmin ediyorum.


0

Başlangıçta Box2D noktadan noktaya kısıtlamalarla birleştirilmiş ince kutulardan oluşan bir halat köprüsü demosuna sahipti; başlamak için iyi bir yer olurdu (hala bu demo ile birlikte gelip gelmediğini bilmiyorum, ama yeniden oluşturmak kolay olurdu).

Halatı katı bir gövde simülatöründen bağımsız olarak mesafe kısıtlamaları olan parçacıklar olarak uygulamak yeterince kolaydır (bahsettiğiniz gibi, bu makalede açıklanan gibi bir Verlet entegrasyonu ve kısıtlama çözme şeması kullanarak: http://www.gamasutra.com/resource_guide/ 20030121 / jacobson_pfv.htm ), ancak sert gövdelerin ipinize tepki vermesini istiyorsanız (videodaki gibi, sarkan kutu ile) o zaman çok daha karmaşık hale gelir. Ben Box2D gibi kapsamlı bir araç paketi ile başlayacak ve parçacıklar oluşturmak ve daha sonra geriye doğru çalışmak.


0

Bu Allegro oyununu hatırlıyorum: SpeedHack 2002'den Cupid . Manzarayla çarpışan halatlar için bir uygulama içeriyor. Kaynak kodunda heart_tails.cpp dosyasındaki PhysParticles ve HeartTrails sınıflarına bakın .

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.