iMedre

SKScene Sınıfı Nedir 1 – SPRITE KIT DERİNLİKLERİ #2

Merhaba arkadaşlar Sprite Kit kütüphanemizin derinliklerine inmeye devam ediyoruz, bu yazıda SKScene sınıfı nedir  ve ikinci yazıda bu sınıfımızın fonksiyonlarını inceleyeceğiz. SKScene uzun bir yazı olacak bu yüzden 2 parçaya bölmeyi düşündüm.

Bir önceki yazıda SKView sınıfının derinliklerine indik, okumadıysanız bir göz atmanızı tavsiye ederim, alt taraftaki kırmızı butona tıklayarak yazıya gidebilirsiniz.

SKView Nedir ve Fonksiyonları Nelerdir?

Ve şimdi Sprite Kit’in en önemli sınıflarından SKScene sınıfına geçelim.

Nedir bu SKScene Sınıfı?

Ekranımızda görüntülenen tüm Sprite(görüntü)’ların ana node’u diyebiliriz, daha da açmam gerekirse, eğer bir ağaç düşünürsek SKScene bu ağacımızın kök node’udur.

Bir SKScene nesnesi, SpriteKit’teki bir içerik sahnesini temsil eder. Bir sahne, SpriteKit node’larının (SKNode) bir ağacındaki kök node’udur. Bu node’lar, sahnenin görüntülenmek üzere canlandırdığı ve oluşturduğu içeriği sağlar. Bir sahneyi görüntülemek için, onu bir SKView nesnesinden sunarız.

Bir Sahne(scene) Oluşturma

Bir sahne(scene), bir görüntü(view) tarafından gösterilir. Sahne , sahnemizin orjininin(merkezinin) nerede konumlanması gerektiği ve sahnenin boyutunu belirleyen özellikler içerir. Eğer sahne görüntünün boyutuna uymuyorsa, sahnenin görünümünde (scale to fit )sığacak şekilde ölçeklendirebiliriz.

Bir Sahnenin Boyutu Görünür Alanını Tanımlar

Bir sahne ilk olarak tanımlandığında(initialize), boyut özelliği, belirlenen tanımlayıcı tarafından yapılandırılır. Sahnenin boyutu, sahnenin görünür kısmının boyutlarını nokta cinsinden belirtir. Bu sadece sahnenin görünen kısmını belirtmek için kullanılır. Ağaçtaki node’lar bu alanın dışına yerleştirilebilir; Bu node’lar hala sahne tarafından işlenir, ancak işleyici tarafından göz ardı edilir.

Sahnenin Koordinat Sistemini Görünümde Konumlandırmak için Bağlantı Noktasını(Anchor Point) Kullanma

Varsayılan olarak, bir sahnenin kökeni aşağıdaki şekilde gösterildiği gibi görünümün sol alt köşesine yerleştirilir. Böylece, 1024 yüksekliğinde ve 768 genişliğinde başlatılan bir sahne, sol alt köşede orijini (0,0) ve sağ üst köşede (1024.768) koordinatı vardır. Çerçeve özelliği (0,0) – (1024,768) tutar.

Sahnenin her zaman bir node ağacının kök node’u olması nedeniyle sahnenin konumu özelliği Scene Kit tarafından yoksayılır. Varsayılan değeri sıfırdır ve bunu değiştiremezsiniz. Ancak, sahnesinin kaynağını anchorPoint özelliğini ayarlayarak taşıyabilirsiniz. Bağlantı noktası(anchor point) birim koordinat alanında belirtilir.

Bir sahne için varsayılan anchor point, görünümün sol alt köşesidir.

 

Bağlantı noktasının(anchor point) varsayılan değeri sıfırdır; bu, onu sol alt köşeye yerleştirir. Sahnenin görünür koordinat alanı (0,0) ila (genişlik, yükseklik) arasıdır. Varsayılan bağlantı noktası, bir sahnenin içeriğini kaydırmayan oyunlar için en kullanışlıdır.

 

İkinci en yaygın bağlantı noktası değeri (0,5,0,5) olup, sahnenin kaynağını aşağıdaki şekilde gösterildiği gibi görüntünün ortasına yerleştirir. Sahnenin görünür koordinat alanı (-genişlik / 2, -yükseklik / 2) – (genişlik / 2, yükseklik / 2). Sahnenin bağlantı noktasının üzerinde ortalanması, en çok, kaydırma oyunundaki gibi, ekranın ortasına göre düğümleri kolayca konumlandırmak istediğinizde kullanışlıdır. Bununla birlikte, bu etki bir SKCameraNode kullanılarak daha iyi elde edilir.

Bir Sahnenin İçeriği Görüntüye Sığmak İçin Ölçeklendirilir

Bir sahne oluşturulduktan sonra, içeriği sunum görünümüne(presenting view) kopyalanır. Görüntü ve sahne aynı boyuttaysa, içerik doğrudan görünüme kopyalanabilir. İkisi farklıysa, sahne görünümüne sığacak şekilde ölçeklendirilir. ScaleMode özelliği, içeriğin nasıl ölçekleneceğini belirler.

Oyununuzu tasarlarken, sahnenin boyutunu ve scaleMode özelliklerini işlemek için bir stratejiye karar vermelisiniz. En yaygın stratejiler şunlardır:

  • Sahneyi sabit bir boyuta getirin ve asla değiştirmeyin. Görünümün sahnenin içeriğini ölçeklemesini sağlayan bir ölçekleme modu seçin. Bu, sahneye öngörülebilir bir koordinat sistemi ve çerçeve sağlar. Ardından sanat varlıklarınızı(assests) ve oyun mantığınızı bu koordinat sistemine dayandırabilirsiniz.
  • Oyunun sahnesinin boyutunu ayarlayın. Gerekirse, oyunun mantığını ve sanat varlıklarını sahnedeki boyuta uyacak şekilde ayarlayın.
  • Yeniden boyutlandırmak için scaleMode özelliğini ayarlayın. SpriteKit sahneyi otomatik olarak yeniden boyutlandırır, böylece her zaman görünümün boyutuyla eşleşir. Gerekirse, oyunun mantığını ve sanat varlıklarını sahnedeki boyuta uyacak şekilde ayarlayın.

Alt taraftaki kodumuz, sabit boyutlu bir sahne kullanmayı planladığınız zaman için tipik bir uygulamayı gösterir. Bu kod, sahnenin ilk sunulduğu zaman yürütülecek yöntemi belirtir. Scaling modu da dahil olmak üzere sahnenin özelliklerini yapılandırır, ardından içerik ekler. Bu örnekte, ölçek modu, içeriği her iki boyutta eşit şekilde ölçekleyen ve tüm sahnenin içeriğinin görünür olmasını sağlayan aspectFit olarak ayarlanmıştır.

 

func createSceneContent() {
    scene.scaleMode = .aspectFit
    scene.backgroundColor = .black
    
}

 

Bir Sahnenin Animasyon Frames'leri İşleme Döngüsü 

Sahneyi canlandırma ve oluşturma süreci sahne nesnesine, SKScene’e bağlıdır. Sahne ve  aksiyon işleme, yalnızca sahne oluştuğunda çalışır. Oluşan bir sahne, sahnenin node ağacının işlenmesi ve oluşturulması arasında dönüşüm sağlayan bir oluşturma döngüsü çalıştırır. Bu model, çoğu oyunda kullanılan render ve processing(işlem) döngüsüne benzer.

SpriteKit, yalnızca içinde bir şey değiştiğinde, enerji verimliliğini artırarak ve oyun veya uygulamanızın arka planda diğer işlemleri gerçekleştirmesine izin verdiğinde sahneyi oluşturacaktır.(info.plist)

 

Oluşturma döngüsü boyunca her seferinde sahnenin içeriği güncellenir ve ardından işlenir. Oluşturma davranışını geçersiz kılamazsınız; bunun yerine sahnede bulunan node’ları güncellersiniz. Ancak sahne, sahne işlemeyi özelleştirmek için geçersiz kılabileceğiniz yöntemleri içerir ve ağaçtaki düğümlerin özelliklerini değiştirmek için eylemleri ve fiziği kullanabilirsiniz. İşte oluşturma döngüsündeki adımlar:

  1. update(_:) – Sahnenin update(_ 🙂 kısmı, simülasyonda şimdiye kadar geçen zaman(_currentTime:) ile çağrılır. Bu, giriş işleme, yapay zeka ve diğer benzer oyun mantığı dahil olmak üzere kendi oyun içi simülasyonunuzu uygulamak için en öncelikli yerdir. Genellikle, node’larda değişiklikler yapmak veya node’lardaki fonksiyonları çalıştırmak için bu yöntemi kullanırsınız.
  2. SKScene, evaluates actions – Sahne, ağaçtaki tüm node’lardaki işlemleri(actions) işler. Çalışan herhangi bir işlemi bulur ve bu değişiklikleri ağaçta uygular. Pratikte, özel  işlemler nedeniyle, kendi kodunuzu çağırmak için işlem mekanizmasına da bağlanabilirsiniz. İşlemlerin işlendiği sırayı doğrudan kontrol edemezsiniz ve sahnenin bazı node’larındaki  işlemleri atlamasına neden olamazsınız, ancak bu node’lardan gelen işlemleri kaldırabilir veya node’ları ağaçtan kaldırabilirsiniz.
  3. didEvaluateActions–  Frame’in tüm işlemleri işlendikten sonra sahne didEvaluateActions () yöntemini çağırır.
  4. SKScene, simulates physics – Sahne, fiziğe sahip ağacın nodelarındaki fiziği gösterir. Bir sahnedeki node’lara fizik eklemek SKPhysicsBody’de açıklanacaktır.
  5. didSimulatePhysicsFrame için tüm fiziksel olaylar gösterildikten sonra sahneye didSimulatePhysics () çağrılır.
  6. SKScene, applies constraints(kısıtlama)- Sahne,  sahnedeki node’larla ilgili herhangi bir kısıtlama uygular. Kısıtlamalar sahnede ilişkiler kurmak için kullanılır. Kısıtlamaları kullanarak, sahne işleminize çok sayıda özel kod yazmanız gerekmez.
  7. didApplyConstraints-Sahne, didApplyConstraints () methodunu çağırır.
  8. didFinishUpdate – Sahne, didFinishUpdate () methodunu çağırır. Bu, sahnede değişiklik yapmak için son şansınızdır.
  9. SKView sahneyi renderlar- Sahne işlendi.

 

Sahne Delegeleri İle Çalışmak

Sahne sınıfını alt sınıflandırma, sahne işlemeyi gerçekleştirmenin yaygın bir yolu olsa da, bunun yerine bir temsilci nesnesi kullanarak bunu önleyebilirsiniz. Yukarıda açıklanan tüm sahne işleme yöntemlerinin SKSceneDelegate protokolünde ilgili yöntemleri vardır. Sahneye bir temsilci(delegate) sağlanırsa ve temsilci bu yöntemlerden birini uygularsa, bu yöntem sahnedeki yerine yerine çağrılır. Örneğin, bir iOS uygulaması, görüntü denetleyicisini temsilci olarak kullanabilir.

Sahnelerde İşleme(Render) Sonrası

Bir sahne, sahne ağacındaki işlemleri herhangi bir sırayla işleyebilir. Bu nedenle, her bir kareyi çalıştırmanız gereken görevleriniz varsa ve bunlar çalıştırıldığında tam denetime gereksinim duyarsanız, bu görevleri gerçekleştirmek için didEvaluateActions () ve didSimulatePhysics () yöntemlerini kullanmalısınız. Genellikle, işlem sırasında, ağaçtaki belirli düğümlerin son hesaplanan konumlarını gerektiren değişiklikler yaparsınız. İşlem sonrası işleminiz bu pozisyonları alabilir ve ağaç üzerinde başka faydalı çalışmalar yapabilir.

 

SKScene sınıfının uzun olacağını söylemiştim, oyunumuzda sahne işlemlerini yapmamızda SKScene sınıfını kullanırız, bu yazıda genel olarak SKScene nedir, render işlemleri, sabitleme noktası vb. konulara değindim, bir sonraki konuda SKScene sınıfının fonksiyonlarına bakacağız. Keyifli okumalar…

 

Erdem Özgür

Yorum Ekle

Bizleri Sosyal Medyadan Takip Edebilirsiniz

Utanmana gerek yok, bizimle iletişim kurabilirsin. İnsanlarla tanışmayı ve yeni arkadaşlar edinmeyi seviyoruz.