Sprite Kit İle iOS 2D Oyun Programlamaya Giriş #1 (Scene, Node ve View Kavramları)
Çırak iOS Geliştirici
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, 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:
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.
// SKScene' e bağlı GameScene subClass'ının oluşumu.
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.
background.position = CGPoint(x: size.width/2, y: size.width/2)
//background pozisyonunu ekranımızda ortaladık.
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.
zombie.zPosition = 1
// background'a -1 zPozisyonu vererek ekranımızda arka plana attık, zombie'yi ise 1 zPozisyonu vererek, ekranımızda önde gözükmesini sağladık.
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
let background = SKSpriteNode(imageNamed: “background1”)
// arka plan resmimizi, SKNode'un alt sınıfı olan SKSpriteNode kullanarak belirledik.
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.
let view = self.view as! SKView?
// View oluşumu.
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.
// içeriğimizi görüntülemek için sahnemizi sunduk.
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. Mevcut özelliklerin tümüne bakmak isterseniz, SKView sınıf referansını inceleyin.
view.showFPS = true
//Eğer her ikisini true olarak ayarlarsak erkranımızda FPS(frame per second) değerini ve Node sayımızı gösterir.
SKView sınıfı hakkında detaylı bilgiyi http://imedre.com/skview-sinifi-ve-fonksiyonlari-sprite-kit-kutuphanesi-1/ adresinden öğrenebilirsiniz.
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.
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 👋…
Like what you read? Give Erdem Özgür a round of applause.
Apple platformlarına yazılım ve tasarım geliştirmek isteyen, genç dinamiklere sahip, farklı yeteneklere ve düşüncelere değer veren heyecanlı bir aileyiz.
Never miss a story from TurkishKit, when you sign up for Medium. Learn more
Never miss a story from TurkishKit