“Pong” ilk bilgisayar oyunudur. İlgilenenler için tarihçesi hakkında birçok kaynak bulunuyor. Uzun bir süre kafamdaki “Pong” benzerini oluşturmak için çabaladım. Fakat benim ilgimi çeken fizik bakış açısı olduğu için yaptığım çalışmalar pek içime sinmedi. Ayrıca ilk başta “Multiplayer” ve “Network tarafına baya kafa yordum ve birçok şey öğrendim fakat sonradan “Collision”(Çarpışma) denen olayın üzerine daha çok gittim ve aldığım sonuçtan memnunum. Belki ilerleyen zamanda “Multiplayer” konusuna da değinen bir yazı yazabilirim. O zaman başlayalım!
“Multiplayer” özelliklerini göz önünden kaldırdıktan sonra, daha tecrübeli olduğum “Lua” dili ve “Löve” yapısıyla “Collision” olayına eğildim. Birçok “Collision” kütüphanesi ile karşılaştığımı söylemeliyim. Bunlar içinde “Hardon Collider” yaptığım çalışmaya daha uygun bir kütüphane olduğu için öne çıktı. ( İsmini başka bir “Collider” ile karıştırmak mümkün. Ama o bambaşka bir “Collider”.* ) *https://en.wikipedia.org/wiki/Large_Hadron_Collider


Ana kod içerisinde “Hardon Collider” kütüphanesini ve kendi oluşturduğum fonksiyonları çağırıp kullanabiliriz.

Ama en önemlisi “Collision” ve bunu aşağıda kısım kısım görebiliriz.

Statik duvarlarla dinamik topun etkileşimi yukarıdaki fonksiyonlarla tanımlandı. Buna göre “collidesWith” fonksiyonuyla statik duvarlarla dinamik topun çarpışması koşuluna bakılıp, dinamik topun hız vektörü bileşenlerini değiştirmek ve böylece dinamik topun yönünü değiştirmek sonucu elde edilebilir.

Oyuncuların kontrol ettikleri dinamik “Platform” ile statik duvarların etkileşimi için ise yukarıdaki fonksiyon parçası kullanıldı.
“Tunneling” denen topun platformların üst veya alt kısmından içeri süzülmesi olayının önüne geçmek istiyoruz. Bu sebeple, “Platform” için yardımcı şekiller “Collision” amacıyla oluşturuldu.

Dinamik nesnelerin (Platform ve top) etkileşimi aşağıda görülmekte. Topun platformun ön kısmında etkileşimi için “collidesWith” fonksiyonu ile önce yine “Collision” koşuluna bakılıyor sonrasında ise for döngüsüyle iki nesnenin “Collision” ayrıştırıcı vektör bileşenleri (delta.x, delta.y) “move” fonksiyonunda kullanılarak ve hız vektörü bileşeninin değiştirilmesi ile topun “Collision” bölgesinden çıkarılması sağlanıyor.

Topun platformların üst ve alt kısımlarıyla etkileşimi için ise kod biraz farklılaşıyor. Burada ayrıştırıcı vektör birleşenleri platform hız bileşenleri ile çarpılıyor, for döngüsünden önce de topun hız vektör bileşeni değiştirilerek, “Tunnelling” problemi çözülüyor ve daha güzel bir etki gözlemleniyor.
Bu çalışmanın diğer kodlarını da ilgilenen olursa diye paylaşayım. “Platform” fonksiyonları için kodları aşağıda belirttim.

Diğer fonksiyonlar için ise kodlar aşağıda görülebilir.

“Collision” olayının oyun tasarımında önemli bir yeri vardır. Dikdörtgen- Dikdörtgen “Collision” olaylarını daha iyi çözümleyen kütüphaneler bulunuyor. Farklı şekillerde geometrik nesnelerin “Collision” işlemleri biraz daha fazla çaba gerektirebiliyor.
İnternette “Hardon Collider” ile ilgili fazla kaynak bulunmuyor. Umarım faydalı bir yazı olmuştur.
Aşağıda yararlandığım kaynakları ve kütüphane web linklerini belirttim. Kullandığım kod editörünün linkini de aşağıda görebilirsiniz.
