iMedre

SKNode Sınıfı Nedir? 1 Sprite Kit Derinlikleri #4

Merhaba dostlar, bu yazıda Sprite Kit kütüphanesinden SKNode sınıfını anlatacağım, keyifli okumalar.

SKNode Nedir?

SKNode sınıfı, çoğu SpriteKit içeriğinin temel yapı taşıdır.

Genel Bakış

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.

Node’ların Özellikleri

Düğümler(Node’lar), görünüm ve alt görünümlerin çalışma şekline benzer şekilde düğüm ağaçlarına hiyerarşik olarak düzenlenir. En yaygın olarak, bir düğüm ağacı, kök düğümü ve soyundan gelen diğer içerik düğümleri olarak bir sahne düğümü (SKScene) ile tanımlanır. Sahne düğümü, düğümlerdeki eylemleri işleyen, fiziği taklit eden ve daha sonra görüntüleme için düğüm ağacının içeriğini oluşturan bir animasyon döngüsü çalıştırır.

Bir düğüm ağacındaki her düğüm, çocuklarına bir koordinat sistemi sağlar. Bir çocuk düğüm ağacına eklendikten sonra, konum özelliklerini ayarlayarak üst öğenin koordinat sisteminde yer alır. Bir düğümün koordinat sistemi, xScale, yScale ve zRotation özelliklerini değiştirerek ölçeklendirilebilir ve döndürülebilir. Bir düğümün koordinat sistemi ölçeklendiğinde veya döndürüldüğünde, bu dönüşüm hem düğümün kendi içeriğine hem de soyunun sahiplerine uygulanır.

SKNode sınıfı kendi çizimini gerçekleştirmez. Ancak, birçok SKNode alt sınıfı görsel içerik oluşturur ve bu nedenle SKNode sınıfı bazı görsel kavramları anlar:

  • Frame özelliği, bir düğümün görsel içeriği için ölçek ve döndürme özellikleriyle değiştirilen sınırlayıcı dikdörtgeni sağlar. Düğümün sınıfı içerik alırsa frame boş değildir. Her düğüm alt sınıfı, bu içeriğin boyutunu farklı olarak belirler. Bazı alt sınıflarda, düğümün içeriğinin boyutu SKSpriteNode sınıfında olduğu gibi açıkça bildirilir. Diğer alt sınıflarda, içerik boyutu diğer nesne özelliklerini kullanarak sınıf tarafından örtük olarak hesaplanır. Örneğin, bir SKLabelNode nesnesi, etiketin mesaj metnini ve yazı tipi özelliklerini kullanarak içerik boyutunu belirler. (Alt Sınıflar Örneğin: SKSpriteNode, SKLabelNode, SKNode’a bağlı sınıflardır.)
  • Bir düğümün birikmiş frame’si calculateAccumulatedFrame () yöntemini çağırarak geri alınır, düğümün frame’ini ve tüm soydaşlarının framle’lerini içeren en büyük dikdörtgendir.
  • Alfa ve isHidden özellikleri gibi diğer özellikler, düğümün ve soyunun nasıl çizildiğini etkiler.

Tüm düğümler, ekrandaki düğüme doğrudan kullanıcı etkileşimini yanıtlayabilen yanıtlayıcı nesnelerdir. Koordinat sistemleri arasında dönüşüm yapabilir ve bir noktanın hangi düğümlerde yer aldığını belirlemek için hit testi gerçekleştirebilirsiniz. Ayrıca fiziksel alanlarının örtüşüp örtüşmediğini belirlemek için ağaçtaki düğümler arasında kesişim yapabilirsiniz.

Ağdaki herhangi bir düğüm, düğümün özelliklerini hareketlendirmek, düğüm eklemek veya kaldırmak, ses çalmak veya diğer özel görevleri gerçekleştirmek için kullanılan eylemleri çalıştırabilir. Aksiyonlar, SpriteKit’teki animasyon sisteminin kalbidir.

Bir düğüm, nesnenin fiziksel özelliklerini simüle eden bir nesne olan bir fizik bedenini destekleyebilir. Bir düğüm bir fizik gövdesine sahip olduğunda, fizik simülasyonu otomatik olarak fizik kütlesi için yeni bir pozisyon hesaplar ve daha sonra bu pozisyona uyacak şekilde düğümü hareket ettirir ve döndürür.

Bir düğüm, olaydaki diğer düğümlerle veya konumlarla ilişkilerini ifade eden kısıtlamalar sağlayabilir. Bu kısıtlamalar, sahne oluşturulmadan önce sahne tarafından otomatik olarak uygulanır. Bir dizi kısıtlama, ters kinematik animasyonlar gerçekleştirmek için eylemlerle birlikte kullanılır.

Ana iş parçacığında düğümlere manipülasyonlar yapılmalıdır. SKViewDelegate, SKSceneDelegate ve SKScene için tüm SpriteKit geri aramaları ana iş parçacığında gerçekleşir ve bunlar düğümlere yönelik manipülasyon yapmak için güvenli yerlerdir.

Oyun İçeriğinizi Düzenlemek için Düz(Plain) Node’ları(düğüm) Kullanın

SKNode nesneleri doğrudan içerik çizemese de, bunları oyununuzda kullanmanın yararlı yolları vardır. Burada başlamanız için birkaç fikir var:

  • Birden çok düğüm nesnesinden, sprite veya diğer içerik düğümlerinden oluşturulmuş içeriğiniz var. Bununla birlikte, bu içeriğin, oyun düğümünüzün herhangi birisini kök olmaksızın tanıtmadan, oyununuzda tek bir nesne olarak düşünülmesini istersiniz. Temel bir düğüm uygundur, çünkü sahne ağacında bir konum verebilir ve sonra diğer düğümleri kendi soyundan yapabilirsiniz. Bu bireysel parçalar ayrıca ebeveynin bulunduğu yere göre hareket ettirilebilir veya ayarlanabilir.
  • Çizilmiş içeriğinizi bir dizi katmana düzenlemek için düğüm nesneleri kullanın. Örneğin, birçok oyun dünya için bir arka plan katmanına, karakterler için başka bir katmana ve metin ve diğer oyun bilgileri için üçüncü bir katmana sahiptir. Diğer oyunlarda çok daha fazla katman var. Katmanları temel düğümler olarak oluşturun ve sırayla sahneye yerleştirin. Ardından, gerektiğinde, bireysel katmanları görünür veya görünmez hale getirebilirsiniz.
  • Sahnede görünmez olan ancak diğer bazı gerekli işlevleri yerine getiren bir nesneye ihtiyacınız vardır. Örneğin, bir zindan keşif oyununda, gizli bir tuzağı temsil etmek için görünmez bir düğüm kullanılabilir. Başka bir düğüm onu kestiğinde, tuzak tetiklenir. (Bkz. SKNode.) Veya başka bir örnek için, oyuncunun bakış açısının konumunu temsil eden başka bir düğümün çocuğu olarak bir düğüm ekleyebilirsiniz.

Bu kavramları temsil etmek için ağaçta bir düğüme sahip olmanın avantajları vardır:

  • Tek bir düğümü ekleyerek veya kaldırarak tüm alt node’ları ekleyebilir veya kaldırabilirsiniz. Bu sahne yönetimini verimli hale getirir.
  • Ağaçtaki bir düğümün özelliklerini ayarlayabilir ve bu özelliklerin etkilerini düğümün soyuna doğru yayılmasını sağlayabilirsiniz. Örneğin, temel düğümün çocukları olarak hareketli düğümleri varsa, temel düğümün döndürülmesi tüm hareketli içeriği de döndürür.
  • Konsepti uygulamak için aksiyonlardan, fizik temaslarından ve diğer SpriteKit özelliklerinden yararlanabilirsiniz.
Bir Düğüm(Node) Çocuklarına Bir Koordinat Sistemi Sunar

Düğüm ağacına bir düğüm yerleştirildiğinde, konum özelliği onu ebeveyn tarafından sağlanan bir koordinat sistemine yerleştirir. SpriteKit, hem iOS hem de macOS’ta aynı koordinat sistemini kullanır. Şekil 1, SpriteKit koordinat sistemini göstermektedir. Koordinat değerleri UIKit veya AppKit’teki gibi noktalarda ölçülür; Gerekli olduğunda, sahne oluşturulduğunda noktalar piksellere dönüştürülür. Pozitif bir x koordinatı sağa gider ve ekrana pozitif bir koordinat belirir.

SpriteKit ayrıca standart bir rotasyon konvansiyonuna sahiptir. Şekil 2 kutupsal koordinat konvansiyonunu göstermektedir. 0 radyan açısı, pozitif x eksenini belirtir. Pozitif bir açı saat yönünün tersine doğrudur.

Şekil 2:

Düğümler, zRotation özelliğini radyan cinsinden gerekli açıya ayarlayarak döndürülür. Derece olarak çalışmayı tercih ederseniz, aşağıdaki kod, ikisi arasında dönüştüren CGFloat’a nasıl bir uzantı yazabileceğinizi gösterir. Liste 2’deki örnek, spriteNode’u saat yönünün tersine 30 derece döndürür.

extension CGFloat {
    func degreesToRadians() -> CGFloat {
        return self * CGFloat.pi / 180
    }
}

let rabbitTexture = SKTexture(imageNamed: "rabbit.png")

let spriteNode = SKSpriteNode(texture: rabbitTexture)

spriteNode.zRotation = CGFloat(30).degreesToRadians()

 

Düğüm Ağacı Yaratmak

Düğümler arasında ebeveyn-çocuk ilişkileri oluşturarak düğüm ağacını oluşturursunuz. Her düğüm, düğümün çocuklarının mülkünü okuyarak başvurulan, sıralı bir çocuk listesini tutar. Ağaçtaki çocukların sırası, hit testi ve render dahil olmak üzere sahne işlemenin birçok yönünü etkiler. Bu nedenle, düğüm ağacını uygun şekilde düzenlemek önemlidir.

addChild(_: )  Alıcının çocuk düğümleri listesinin sonuna bir düğüm ekler.

insertChild(_:at: )   : Bir çocuğu, alıcının çocuk düğümleri listesinde belirli bir konuma ekler.

removeFromParent(): Alıcı, düğümü ana öğesinden kaldırır.

Düğüm ağacını doğrudan çaprazlamanız gerektiğinde, ağacın yapısını ortaya çıkarmak için aşağıdaki tabloda özellikleri kullanırsınız.

children: Alıcı düğümün çocukları olan SKNode nesnelerinin dizisi.

 parent:  Düğüm başka bir düğümün çocuğuysa, bu üst öğeyi tutar. Aksi halde, sıfır tutar.
 scene: Düğüm bir sahnede herhangi bir yerdeyse, bu, ağacın kökü olan sahne düğümünü döndürür. Aksi halde sıfır tutar.

Bu yazımızda SKNode sınıfı nedir, düğüm ağacı nasıl oluşturulur, node’ların özellikleri, koordinat sistemi oluşumu, çocuk-ebeveyn kavramı vb. konularını gördük, bir sonraki yazımızda SKNode sınıfına devam edeceğim. 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.