18 Ağustos 2015 Salı

Çizgi - Çember Çarpışma Kontrolü

 




Bu aralar JavaScript'e merak saldığım için küçük de bir oyun projesi geliştiriyorum. Bu oyundaki karakterin oyun gereği kutuların arasında dolaşması gerekiyor, ancak beklendiği gibi kutuların içerinden geçmemesi lazım. Bu durumda yapılabilecek en kesin çözüm, daha önce denenmiş bir framework'ü projeme dahil etmek olabilir. Örnek olarak box2d fizik motorunun JavaScript portu eklenebilir. Ancak projede fizik motoruna ihtiyacım yok ve kullanılmayacak kodu sayfaya eklemek gereksiz bant genişliği harcanmasına sebep olacaktır. İşte bu nedenlerden ötürü basit bir şekilde bu çarpışma kontrolünü gerçekleştiren bir script oluşturmak istedim.

CircleLineCollider.js ismini verdiğim sınıfın son hali. JsFiddle'a eklediğim için tek dosya haline getirmek durumunda kaldım.


JSFiddle

Test Kodu
https://jsfiddle.net/ercang/ornh3594/

Son Hali
https://jsfiddle.net/ercang/menp0991/

Bilinen Sorunlar:

1) Test edilecek çizgiler her seferinde parametre olarak geçiriliyor, sadece çarpma ihtimali olan geometrileri test etmek mantıklı olacaktır. Burada çok fazla geometri test edilirse büyük ihtimalle performans sorunu oluşacaktır. Kendi uygulamamda zaten geometriler karelere bölündüğünden benim durumumda çok sorun oluşturmadı.

2) Sistem sadece çemberi en küçük vektör ile çizgiden ulaştırmaya yarıyor. Hareket miktarı çemberin yarı çapına yaklaşırsa, çizgiye çarpmak yerine onu delip geçecektir. Yine projemde böyle bir durumun oluşma ihtimali olmadığından bununla ilgili bir çözüm bulmadım. Yani hareket basamakları yarı çaptan küçük olmalı.

Kaynak:

http://stackoverflow.com/questions/1073336/circle-line-segment-collision-detection-algorithm

Hiç yorum yok:

Yorum Gönder