SpriteKit: 2D Oyun Programlama

Apple’ın 2 boyutlu oyunlar geliştirmemizi sağlayan SpriteKit oyun motoru ile sizde kendi oyununuzu yapmaya başlayın.

Erdem Özgür
TurkishKit
5 min readSep 10, 2018

--

Selam 👋 , bu yazıda Apple’ın 2 Boyutlu oyunlar geliştirmemizi sağlayan Sprite Kit Oyun Motoru hakkında geniş bir bilgiye sahip olacaksınız ardından hep birlikte Zombie👽 Conga oyununu kodlayacağız, keyifli okumalar.

-Zombie conga oyunumuzdan görüntü.

SpriteKit Nedir?

SpriteKit, Apple’ın 2D oyun motorudur — OpenGL’in üzerine kurulu bir oluşturma motorudur. İOS 7 ile tanıtıldı ve sonraki her sürüm, SpriteKit’e büyük güncellemeler getirdi. Texture Sprite’lar, yerleşik fizik motoru ve çok güçlü SKAction sınıfının kullanımıyla, oldukça hızlı bir şekilde işlevsel 2D oyunlar oluşturabilirsiniz.

-sprite kit ile geliştirmiş olduğum küçük çaplı 2D oyunlar. Hep birlikte bu oyunları geliştireceğiz.

SpriteKit, geliştiricilerin OpenGL ve Metal gibi grafik API’larının karmaşıklığı hakkında endişe duymadan yüksek kalitede 2D oyunlar oluşturmasına olanak veren bir oyun motorudur. SpriteKit, geliştiricilere ait tüm grafikleri kullanmanın yanı sıra, fizik simülasyonu, ses / video oynatma ve oyunları kaydetme/ yükleme gibi çok çeşitli ekstra işlevler sunar.

SpriteKit Öğrenmeden Önce Bilmeniz Gerekenler;

Oyun motorumuzdaki sınıflar bir hiyerarşik düzene sahiptir. Her birinin bazı yetkileri vardır veya bazı sınıflar, bazı sınıfların alt sınıflarıdır. Öğrenmemiz gereken en önemli ilk üç sınıf şu şekildedir:

SKView

SKScene

SKNode

Scenes (Sahneler)

SpriteKit ile çalışırken bilmeniz gereken ilk sınıf SKScene sınıfıdır. SpriteKit ile oluşturulmuş herhangi bir 2D oyun için, oyunun içeriğini her biri kendi SKScene alt sınıfıyla birden çok sahneye ayırırsınız. SKScene sınıfı ana node’dur. Bu node’lar, sahnenin görüntülenmek üzere canlandırdığı ve oluşturduğu içeriği sağlar. Bir sahne (scene), bir görüntü (view) tarafından gösterilir. SKScene sınıfıyla ilgili detaylı bilgiyi http://imedre.com/skscene-sinifi-nedir-1-sprite-kit-derinlikleri-2/ linkinden okuyabilirsiniz.

Node’lar (Sprite)

SKNode sınıfı, çoğu SpriteKit içeriğinin temel yapı taşıdır. SKNode sınıfı herhangi bir görsel içerik çizmez. Temel rolü, diğer node sınıflarının kullandığı temel davranışları sağlamaktır. SpriteKit tabanlı bir oyundaki tüm görsel öğeler, önceden tanımlanmış SKNode alt sınıfları kullanılarak çizilir.

SKScene’in bir alt sınıfı olan SKNode sınıfı, sahnenizdeki herhangi bir öğeyi temsil etmek için kullanılır.

  • position (CGPoint) Bir node’un sahnedeki pozisyonunu belirler.
  • xScale (CGFloat): Bir node’un yatay ölçeğini temsil eder.
  • yScale (CGFloat): xScale’ye benzer fakat bunun yerine dikey yönde hareket sağlar.
  • alpha (CGFloat): node’un saydamlığını temsil eder.
  • hidden (Bool): node’un görünüp görünmeyeceğini belirleyen değerdir.
  • zRotation (CGFloat): radyan cinsinden açıyı temsil eder ve node’un döndürülmesini sağlar.
  • zPosition (CGFloat): sahnedeki diğer node’ların üstünde hangi node’ların görüntüleneceğini belirlemek için kullanılır.

Gördüğünüz gibi, yukarıdaki özellikler bir sahnede her düğümün temel görünümünü doğru bir şekilde konumlandırmanıza, döndürmenize ve düzenlemenize olanak tanır.

UIKit’deki herhangi bir UIView nesnesine alt görünümler ekleyebileceğiniz gibi, SpriteKit’te mevcut düğümlere herhangi bir sayıda çocuk düğümleri ekleyebilirsiniz. Bu, herhangi bir SKNode nesnesindeki addChild(_:) yöntemini kullanarak yapılır.

Ayrıca, UIView nesnelerine benzer şekilde, herhangi bir çocuk düğümün pozisyon ve ölçek özellikleri, eklendiği ana node’a göredir. SKNode’un bir alt sınıfı olan SKScene nesnesi, sahnenin kök node’u gibi davranabilir. Sahnenizde istediğiniz tüm node’lar için, onları addChild(_:) yöntemini kullanarak sahnenin kendisi (çocuklar) olarak eklemeniz gerekir.

SKNode sınıfı kendi başına herhangi bir görsel içerik üretememektedir. Bunu yapmak için, SpriteKit’te bulunan birçok alt sınıftan birini kullanmanız gerekir. Dikkat edilmesi gereken bazı önemli SKNode alt sınıfları şunlardır:

  • SKSpriteNode: bir görüntü alır ve sahnede texture(görüntü) bir hareketli grafik oluşturur
  • SKCameraNode: sahnenin nerede görüntülendiğini kontrol eder.
  • SKLabelNode: yazı stringleri oluşturmanızı sağlar
  • SKEmitterNode: particle sistem üretmenize ve sahnenizde kullanmanıza yardımcı olur.
  • SKLightNode: oyununuza aydınlatma ve gölgelendirme oluşturur.

SKNode sınıfıyla ilgili daha detaylı bilgiye http://imedre.com/sknode-sinifi-nedir-1-sprite-kit-derinlikleri-4/ linkinden ulaşabilirsiniz.

View’ler (Görünümler)

SpriteKit içeriğinizi çalışan bir uygulamada görüntülemek için, SKView sınıfını kullanmanız gerekir. Bu, uygulamanızın herhangi bir bölümüne kolayca eklenebilen UIView (veya OS X üzerinde NSView) alt sınıfıdır. Bir SpriteKit sahnesini sunmak için, bir SKView örneğindeki presentScene(_:) veya presentScene(_:transition:) yöntemini çağırmanız gerekir. Özel bir animasyon veya yeni sahnesine geçiş yapmak istediğinizde ikinci yöntem kullanılır.

SpriteKit içeriğinizi oluşturmaya ek olarak, SKView sınıfı ayrıca bazı ekstra ve çok kullanışlı işlevler sunar. Oyununuzda hata ayıklama yaparken yararlı olan ve bulunduğunuz yerdeki mevcut FPS (saniye başına kare), düğüm sayısı ve fizik alanları gibi bilgileri gösterebilen çeşitli özellikler de vardır.

SKView sınıfı hakkında detaylı bilgiyi http://imedre.com/skview-sinifi-ve-fonksiyonlari-sprite-kit-kutuphanesi-1/ adresinden öğrenebilirsiniz.

Bu Yazıda…

Sprite kit nedir, ne işe yarar, node’lar, scene’ler ve view’ler konularına değindim. Sprite Kit hakkında daha detaylı bilgi almanız için imedre.com’da arama çubuğuna gereklı sınıfı yazarak detaylı bilgiye ulaşabilirsiniz.

Swift Öğrenin. Uygulama Geliştirin. Sınırların Ötesine Geçin.

Hem kod yazmaya yeni başlayanların hem de profesyonellerin rahatlıkla takip edebilecekleri 40 saatlik videolu eğitim ile Swift programlama dilini derinlemesine keşfedin. Eğitim boyunca karşılaşacağınız problemleri birebir online görüşmelerde çözün.

Bu yazıdan Sonra…

Sizlerle birlikte 0'dan detaylı olarak zombie conga oyununu yapacağız ve yaparken birçok bilgi öğreneceğiz. Örneğin;

1-Zombie’mizi manual hareket ettirme(2Boyutlu vektörlerde yön ve uzunluk kavramı, velocity ve deltaTime ile gideceğimiz mesafeyi belirleme),

2-Ekrana dokunarak Zombie’mizi dokunulan yere gitmesini sağlama,

3-Birim vektörü belirleme, dokunma olayları(touchesBegan, touchesMoved)

4-Ekranın sınırlanması, bounds etkisi ile zombie’mizin ekran sınırlarından geri dönmesi.

Vb. konularını göreceğiz. Görüşmek üzere 👋…

--

--