Sprite ve bir çeşit kullanıcı tarafından oluşturulan şekil arasındaki çarpışmalar nasıl tespit edilir?


9

Sprite ve bir tür kullanıcı tarafından oluşturulan şekil arasındaki bir çarpışma nasıl tespit edilir.

Örneğin. Ekranda bazı nesneler var. Kullanıcı parmağını alır ve bir nesnenin çevresine bir daire şekli çizer (Seçim kuralı hareketli grafiğin etrafında daire çizer, ancak resim şekilleri çeşitli olabilir). Hangi nesne seçildi, hangi gibi tespit etmek gerekir:

(demo görüntüleri): aslen http://i52.tinypic.com/28h0t1g.png olarak gönderildi


Son örneğinizde mavinin neden seçildiğini ve kırmızı olmadığını açıklayabilir misiniz? Çizginin gerçekten hareketli grafiğe dokunması gerekip gerekmediğini açıklayabilir misiniz? Üçüncü örnek kırmızı kutuya dokunmaz, ancak seçildiği gibi belirtilir. 5. örnek çok benzer ancak seçilmedi. # 3 ve # 5 arasındaki fark nedir?
Romen

Yanıtlar:


2

Şekil öncelikle kullanıcıdan gelen çizgi bölümleriyle (veya kontrol noktalarına sahip Bezier eğrileriyle) çizilirse, Ayırma Ekseni Teoremi olarak bilinen oldukça yaygın bir algoritma uygulayabilirsiniz . Basitçe söylemek gerekirse: Şekillerin üst üste gelmediği bir eksen (bir yönü temsil eden birim-vektör) varsa (yansıtılan değerleri pozitif bir farkla sonuçlanmaz), nesneler çakışmaz. Bunu geçmişte kullandım ve bir cazibe gibi çalıştı.



0
  • Ekranla aynı boyutta bir tampon oluşturun (veya Şekillerinizin olduğu yüzey). Her pozisyonda sprite olup olmadığı boole içerir; daha sonra, konumlarındaki hareketli grafik olup olmadığını (bu boole değerini kontrol ederek) kullanıcı şeklinin tüm "piksellerini" kontrol edin. Alternatif olarak, boolean yerine kimliğini saklayarak daha fazla sprite oluşturabilirsiniz; ama bu 1 sprite örneğiydi.
  • Kullanıcı tarafından oluşturulan şekil satır dizisiyle temsil edilebilirse, bu tür hatların her birinin hareketli grafik çizip geçmediğini kontrol edebilirsiniz. Sprite dikdörtgen şekle sahip olduğundan ve kullanıcı şekli bir çizgi olduğundan "çizgi dikdörtgen kesişimi" arayın (bunu yapmak için tek bir eksen algoritması ayırın)

Yaklaşımlar, bitmap veya vektör olsun, hangi veri yapılarını seçtiğinize bağlıdır.

İlk yaklaşım keyfi karmaşık şekilleri işleyebilir, uygulanması kolaydır, ancak daha fazla bellek kullanır. Aslında sıkıştırma kullanarak bellek yükünü azaltabilir ve hiyerarşik veri strutures (octrees) kullanarak hızlandırabilirsiniz ...

İkinci yaklaşım, uygulanması o kadar basit değildir, ancak daha fazla işlem gücü kullanır.

Her durumda önemli olup olmadığını ölçün. İlkini yapmaya çalışacağım çünkü uygulaması daha basit. İyi şanslar. :)

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.