SpriteKit’de Fizik Motorunun Temelleri #1

Bir fizik motoruyla, birçok popüler iOS oyununda gördüğünüz efektleri gerçekleştirebilirsiniz. Dokunma kontrolleri olan bir fizik motorunu yaratmak, oyunlarınıza harika bir gerçekçilik kazandırabilir.
Bu tür gerçekçi davranışlardan hoşlanıyorsanız ve kendi fizik tabanlı oyununuzu nasıl kuracağınızı bilmek istiyorsanız doğru yazıdasınız!

• Angry Birds, fırlatılan bir kuşun kule ile çarpışması sonucu nasıl bir davranış sergileyeceğini simüle etmek için bir fizik motoru kullanır.
• Tiny Wings, tepeleri süren ve havaya uçan kuşu simüle etmek için bir fizik motoru kullanır.
• Cut The Rope, halatların hareketini ve yer çekiminin şeker üzerindeki etkisini simüle etmek için bir fizik motoru kullanır.


SpriteKit’te Fizik

SpriteKit tüm fizik hesaplamalarını gerçekleştirmek için Box2D adlı bir kütüphane kullanır. Box2D açık kaynaklı, tam özellikli, hızlı ve güçlüdür. Pek çok popüler oyun, iPhone, Android, BlackBerry, Nintendo DS, Wii, OS X ve Windows’da zaten Box2D kullanıyor — bu yüzden kütüphaneyi SpriteKit’in bir parçası olarak görmek çok güzel. 🙂

Ancak, Box2D’nin iOS geliştiricileri için en temel dezavantajı C++ ile yazılmış olmasıdır.
Apple, Box2D’yi doğrudan göstermez; bunun yerine SpriteKit’teki kendi API’sinin arkasından soyutlar.
SpriteKit ile süper popüler bir oyun motorun tüm gücüne erişebilirsiniz. Ancak bir API aracılığıyla.


Fizik Gövdeleri

Fizik motorunun sprite’lardan birinin hareketini kontrol etmesi için bir fizik gövdesi oluşturmanız gerekir. Fizik gövdelerini çarpışma tespiti için kullanılacak kaba bir sınır olarak düşünebilirsiniz.
Aşağıdaki illüstrasyon, bir hareketli grafik için tipik bir fizik gövdesini göstermektedir. Fizik bedeninin şeklinin tam olarak sprite sınırlarına uyması gerekmez. Çarpışma algılama algoritmalarının daha hızlı çalışmasına yardımcı olmak için genellikle daha basit bir şekil seçersiniz.

Daha kesin sınırlara ihtiyacınız varsa, SpriteKit’e görüntünün tüm saydam kısımlarını göz ardı etmesini ve hareketli grafiğinizin şeklini algılamasını söyleyebilirsiniz. Oyununuzdaki nesneler arasında daha gerçekçi bir çarpışma istiyorsanız bu iyi bir stratejidir. Yukarıdaki kediye göre otomatik olarak algılanan, şeffaflığa dayalı fizik gövdesi aşağıdakine benzeyecekti:

“Mükemmel! Bunu her zaman kullanacağım. ” diye düşünebilirsiniz fakat
iki kere düşünün. Eğer sprite’ınız daha basit bir çokgen şekle uyuyorsa onu kullanın. Bu gibi karmaşık bir şekil için yapılacak fizik hesaplamanın çok daha fazla işlem gücü aldığını anlayın.

Sprite’ınız için bir fizik gövdesi belirledikten sonra, gerçek hayatta benzer şekilde hareket edecektir: yerçekimi ile düşecek, impulse(etki) ve kuvvetlerden etkilenecek hatta diğer nesnelerle çarpışmaya tepki olarak hareket edecektir.

Fizik bedenlerinizin özelliklerini, ne kadar ağır veya kabarık olduklarını ayarlayabilirsiniz. Simüle edilmiş dünyanın tümünün yasalarını da değiştirebilirsiniz — örneğin: toprağın yere düştüğü zaman daha yüksek bir sıçrama yapması ve daha uzaklara gitmesi için yer çekimini azaltabilirsiniz.
İki top attığınızı ve her seferinde bir sıçrama yaptığınızı düşünün — Ay’da olduğu gibi normal yer çekimi kırmızı olan ve mavi ise düşük yerçekimini temsil eder. Böyle bir şeye benzer;

Fizik bedenleri hakkında bilmeniz gereken birkaç şey var:

  • Fizik cisimleri katıdır. Başka bir deyişle, fizik bedenleri basınç altında ezilemez veya deforme olmaz ve fizik simülasyonunun bir sonucu olarak şekil değiştiremez. Örneğin, zeminde yuvarlanan şekliyle deforme olan yumuşacık bir topu simüle etmek için bir fizik gövdesi kullanamazsınız.
  • Karmaşık fizik kütlelerinin performans maliyeti vardır. Resimlerinizin alfa maskesini fizik gövdesi olarak kullanmak uygun olsa da, kesinlikle bu özelliği gerekli olduğunda kullanmalısınız. Ekranda birbiriyle çarpışan birçok biçim varsa, yalnızca ana karakteriniz için veya iki ila üç ana karakter için bir alfa maskesi kullanmayı deneyin ve gerisini dikdörtgenlere veya daireler ile ayarlayın.
  • Fizik cisimleri kuvvetler(forces) veya dürtüler(impulses) ile hareket eder. İki fizik gövdesini birbirinden darbeler ile ayrılır ve nesnenin momentumunu hemen ayarlar. Yerçekimi gibi kuvvetler, nesneyi zaman içinde kademeli olarak etkiler. Kendi kuvvetlerinizi veya dürtülerini fizik bedenlerine de uygulayabilirsiniz — örneğin: bir silahı bir mermi ateşlemeyi simüle etmek için bir dürtü kullanabilirsiniz.

SpriteKit, bu özelliklerin tümünü ve daha fazlasını yönetmeyi inanılmaz derecede kolaylaştırır. Bu yazıda spriteKit’de fizik motorununun temellerini anlattım. Bir sonraki yazımda, yer çekimi, impulse, kütle ve birçok yeni özelliğe değineceğim. Şimdilik hoşçakalın 👋.