iMedre

SKWarpGeometryGrid Sınıfı Nedir Ve Fonksiyonları Nelerdir? Sprite Kit Kütüphanesi #31

Merhaba bu yazıda Sprite Kit Kütüphanesinden SKWarpGeometryGrid sınıfını anlatacağım. Keyifli okumalar.

SKWarpGeometryGrid Nedir ?

SKWarpable ile uyumlu düğümlerin sistem tabanlı deformasyonu için bir tanım. Node’u bişimsizleştirme.

Genel Bakış

Normalleştirilmiş köşe konumlarının iki dizisini sağlayarak bir SKWarpGeometryGrid yaratırsınız.

Sütun veya satırların sayısı, sırasıyla yatay veya dikey köşelerin sayısından azdır.

Köşeli konumların kaynağı sol altta: Aşağıdaki kod, iki sütun ve iki satırlı bir atlama geometrisi için varsayılan kaynak konum kümesi olarak işlev görebilecek eşit aralıklı bir dizi diziyi nasıl oluşturabileceğinizi gösterir. Dizideki ilk öğe, sol alttaki konumla ilgilidir ve son öğe sağ üstteki konuma karşılık gelir.

let sourcePositions: [float2] = [
    float2(0, 1),   float2(0.5, 1),   float2(1, 1),
    float2(0, 0.5), float2(0.5, 0.5), float2(1, 0.5),
    float2(0, 0),   float2(0.5, 0),   float2(1, 0)
]

Eğer yatay olarak yukarıda yer alan köşeler tarafından tanımlanan bir sistemi yatay olarak sıkıştırmak istiyorsanız – ki bu dikey olarak gerilmesine neden olur – aşağıdaki gibi bir dizi hedef pozisyonu kullanabilirsiniz:

let destinationPositions: [float2] = [
    float2(-0.25, 1.5), float2(0.5, 1.75), float2(1.25, 1.5),
    float2(0.25, 0.5),   float2(0.5, 0.5),   float2(0.75, 0.5),
    float2(-0.25, -0.5),  float2(0.5, -0.75),  float2(1.25, -0.5)
]

Bir warp geometrisi nesnesi tanımlamak için bu iki diziyi kullanırsınız.

let warpGeometryGrid = SKWarpGeometryGrid(columns: 2,
                                          rows: 2,
                                          sourcePositions: sourcePositions,
                                          destinationPositions: destinationPositions)

 

Bir geometri ızgarası, kaynak konumlar (sol çizim) tarafından tanımlanan geometriyi hedef konumlar (sağdaki resim) tarafından tanımlanan yeni bir geometriye çarpıtır.

 

Bu geometriyle, SKSpriteNode gibi SKWarpable’a uyan bir düğüme uygulamak için birkaç seçeneğiniz vardır.

Geometri, düğümlerin warpGeometry özelliğini ayarlayarak animasyon olmadan hemen uygulanabilir. Her bir sahne güncellemesiyle hedef konumlarını hesaplar ve uygularsanız, örneğin bir kullanıcının dokunuşuna yanıt olarak bu tekniği kullanmayı tercih edebilirsiniz.

Warp tarafından yaratılan eylemi kullanarak animasyonlu bir geçiş efekti vermek için zamanla tek bir çözgü uygulanabilir (to: duration : ). Bir çözgü eylemi kullanmak için, önce bir ilk geometri tanımlamanız ve onu, çözülmesini istediğiniz düğümün warpGeometry’si olarak ayarlamanız gerekir. Init (colums: rows : )başlatıcısı, distorsiyonu olmayan uygun bir geometri oluşturur.

Aşağıdaki kod listesinde, yukarıda oluşturulan gerilmiş çözgü geometrisi, saniyeler içinde belirtilen bir süre boyunca bir atlama eylemini başlatmak için kullanılır. Düğümün çalıştırma yöntemi, eylemi yürütür.

let sprite = SKSpriteNode()
let warpGeometryGridNoWarp = SKWarpGeometryGrid(columns: 2, rows: 2)
sprite.warpGeometry = warpGeometryGridNoWarp
let warpAction = SKAction.warp(to: warpGeometryGrid,duration: 0.5)
sprite.run(warpAction!)

 

Karmaşık geçiş animasyonları oluşturmak için çoklu çözgü geometrilerini bir araya getirebilirsiniz. Örneğin, düğümü deforme etmeyen çözgü geometrisiyle, gergin geometriye 0.5 ”de başlamak isteyebilir ve sekansı 0.75” de ilk geometriye dönerek bitirebilirsiniz. Aşağıdaki kod, animate (withWarps:  times : ) yöntemini kullanarak bu eylemi oluşturur.

let warpAction = SKAction.animate(withWarps:[warpGeometryGridNoWarp, 
                                             warpGeometryGrid,
                                             warpGeometryGridNoWarp],                                  
                                  times: [0.25, 0.5, 0.75])

 

SKNode alt sınıfının ancak SKWarpable’a uymayan nesneler – örneğin SKShapeNode, SKEmitterNode veya SKVideoNode – bir SKEffectNode nesnesinin alt öğesi olarak eklenmesiyle çarpıtılabilir. Örneğin, bu yaklaşımı, basit geometrik temel değerler veya CGPath nesneleri olarak sağlanan vektör resmini deforme etmek ve bir şekil düğümü ile işlenmek için kullanabilirsiniz. Bir etki düğümünün çocuğu olarak eklenen bir parçacık yayıcı düğümün uyarılması, bir parçacık sisteminin genel şeklinin kesin kontrolünü sağlar.

Fonksiyonlar

init(columns: Int, rows: Int)

Belirtilen boyuttaki bir warp geometrisi sistemi oluşturur.

init(__columns: Int, rows: Int, sourcePositions: UnsafePointer<vector_float2>?, destPositions: UnsafePointer<vector_float2>?)

Tanımlanmış bir warp çeviri ile belirtilen boyutta bir atlama geometrisi sistemi oluşturur.

var numberOfColumns: Int

Alıcının sütun sayısını döndürür.

var numberOfRows: Int

Alıcının satır sayısını döndürür.

var vertexCount: Int

Alıcının toplam köşe sayısını döndürür.

func destPosition(at: Int)

Bir köşe noktasının hedef konumunu döndürür.

func sourcePosition(at: Int)

Bir köşe noktasının kaynak konumunu döndürür.

 

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.