iMedre

SKTextureAtlas Sınıfı Nedir ? Sprite Kit Derinlikleri #17

Merhaba, bu yazıda SKTextureAtlas konusunu anlatacağım. Keyifli okumalar.

SKTextureAtlas Kısaca Nedir?

Resim koleksiyonu diyebiliriz.

Genel Bakış

Bir SKTextureAtlas nesnesi, uygulama paketinde depolanan veya çalışma zamanında oluşturulan bir doku atlasından oluşturulan ilgili doku(resim) nesneleri koleksiyonudur. Doku atlası, bellek kullanımını ve görüntü performansını artırabilir. Her zaman birlikte kullanılan dokular varsa, bunları bir atlasta saklayın.

SpriteKit, atlas içinde saklanan bir doku görüntüsüne erişildiğinde atlasları dolaylı olarak yükler. Doku atlasının içeriğine açıkça erişmek istediğinizde SKTextureAtlas sınıfını kullanın.

İlgili Sanat Varlıklarını Toplamak için Doku Atlası Kullanımı

Sprite Atlas Yaratmak

Bir sprite atlası, bir varlık kataloğunun yönetim işlevselliği ile bir doku atlasının avantajlarını sunar. Örneğin, farklı cihazlar için farklı çözünürlüklere sahip varlıklar sağlıyorsanız, hareketli atlaslar uygulama inceltmeyi destekler ve kullanıcılarınız yalnızca gerekli görselleri indirir.

Xcode kullanarak bir sprite atlası oluşturursunuz. Projenize yeni bir varlık katalogu eklemek için Xcode’u kullanın (bkz: Bir projeye dosya ve klasörler ekle) ve yeni varlık katalogunun içinde yeni bir hareketli grafik atlası ekleyin.

Texture Atlas Yaratmak

Xcode kullanarak doku atlası oluşturursunuz. Projenize .atlas uzantısıyla bir klasör ekleyin ve bu klasördeki atlas’a eklenecek resmi yerleştirin. Xcode, resimden bir doku atlası oluşturur ve bunu uygulama paketine ekler. Derlenmiş bir doku atlası formatı özeldir ve değişebilir.

Çalışma Zamanında Texture Atlas Oluşturma

Doku atlas nesneleri çalışma zamanında, atlasın parçası olması gereken çeşitli görüntü dosyalarına işaret eden bir sözlük sağlayarak oluşturulabilir.

Aşağıdaki kod, üç görüntü dosyasından init (dictionary:) kullanarak bir SKTextureAtlas nesnesini nasıl oluşturabileceğinizi gösterir. Başlatıcı, sözlüğünde isteğe bağlı değerler için izin vermediğinden, tüm görüntülerin varlığını sağlamak için bir koruma bildirimi kullanılır:

guard let pandaImage = UIImage(named: "panda.png"),
    let monkeyImage = UIImage(named: "monkey.png"),
    let rabbitImage = UIImage(named: "rabbit.png") else {
        print("unable to resolve all images")
        return
}  
let textureAtlas = SKTextureAtlas(dictionary: ["panda": pandaImage,
                                               "monkey": monkeyImage,
                                               "rabbit": rabbitImage])

Texture Atlasdan Görüntü Ekleme

Init kullanarak bir doku oluşturmak (imageNamed :), mevcutsa doku atlasındaki bir görüntü dosyasından yeni bir SKTexture nesnesi oluşturacaktır.

SpriteKit, belirtilen dosya adı ile bir görüntü dosyası için önce arar. Bir tane bulamazsa, uygulama paketinde yerleşik herhangi bir doku atlasının içinde arar. Bu, oyununuzda bunu desteklemek için herhangi bir kodlama değişikliği yapmanız gerekmediği anlamına gelir. Bu tasarım ayrıca sanatçılarınızın yeni dokular ile oyununuzu yeniden oluşturulmasını gerektirmeden deney yapmalarını sağlar. Sanatçılar dokuları uygulama paketine indiriyor. Uygulama yeniden başlatıldığında, SpriteKit dokuları otomatik olarak keşfeder (doku atlaslarında yerleşik olan önceki sürümleri geçersiz kılar). Sanatçılar dokulardan memnun olduklarında, o dokuyu projeye eklersiniz ve bunları doku atlaslarınızda pişirirsiniz.

Açıkça atlas nesnelerle çalışmak istiyorsanız, SKTextureAtlas sınıfını kullanın. İlk olarak, atlasın adını kullanarak bir doku atlası nesnesi oluşturun. Ardından, tek tek dokuları aramak için atlas’ta depolanan görüntü dosyalarının adlarını kullanın. Aşağıdaki kod, bunun bir örneğini gösterir. Bir canavar için birden fazla animasyon karesi barındıran bir doku atlası kullanır. Liste 2, bu çerçevelerden dokuların nasıl oluşturulduğunu gösterir ve bunları bir dizide saklar. Gerçek projede, dört görüntü dosyasıyla bir monster.atlas klasörü eklersiniz.

let atlas = SKTextureAtlas(named: "monster")
let f1 = atlas.textureNamed("monster-walk1.png")
let f2 = atlas.textureNamed("monster-walk2.png")
let f3 = atlas.textureNamed("monster-walk3.png")
let f4 = atlas.textureNamed("monster-walk4.png")
let monsterWalkTextures = [f1, f2, f3, f4]

Projenizin bir texture atlası mı yoksa bir sprite atlası mı kullandığını, varlıkları yüklemek için kullanılan kod aynıdır.

Texture Atlasları Oluşturma Rehberi

Bir doku atlası oluşturduğunuzda, çok fazla doku toplarken veya çok azını birleştirmek arasında bir denge kurmak istersiniz. Çok az resim kullanırsanız, bir çerçeve oluşturmak için SpriteKit’e hala birçok çizim geçişi gerekebilir. Çok fazla resim eklerseniz, büyük miktarda doku verisinin bir kerede belleğe yüklenmesi gerekebilir. Xcode, atlasları sizin için oluşturduğundan, farklı atlas konfigürasyonları arasında nispeten kolay geçiş yapabilirsiniz. Bu nedenle, doku atlaslarınızın farklı konfigürasyonlarını deneyin ve size en iyi performansı veren kombinasyonu seçin.

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.