SpriteKit: nədir, səhnə komponentləri və oyun yaradılması

Müəllif: IT Sectr Dərc olunub: 2026-05-02 Oxuma vaxtı: 10 dəq

SpriteKit — Apple tərəfindən iOS, macOS, tvOS və watchOS üçün 2D oyunların hazırlanması üçün freymvorkdur. Qrafika, fizika, animasiya və səslə işləmək üçün hazır komponentlər təqdim edir, tərtibatçılara geympleyə diqqət etməyə imkan verir. Apple WWDC (2025) məlumatlarına görə, SpriteKit App Store-da 200 mindən çox tətbiqdə istifadə olunur.

Əsas məqamlar

  • SpriteKit — Metal vasitəsilə GPU-da renderləmə ilə Apple-ın 2D oyunlar üçün freymvorku
  • SKScene — düyün qrafı və yeniləmə dövrü ilə əsas səhnə konteyneri
  • Fizika mühərriki SpriteKit bərk cisimlərin simulyasiyasını, birləşmələri və toqquşmaları dəstəkləyir
  • SKActions kadrların əl ilə idarə edilməsi olmadan mürəkkəb animasiyalar yaratmağa imkan verir
  • İnteqrasiya GameplayKit, AVFoundation və Core Image ilə inkişaf imkanlarını genişləndirir

SpriteKit nədir?

SpriteKit — Apple SDK-nın tərkibinə daxil olan 2D qrafika və oyunlar üçün freymvorkdur. 2013-cü ildə iOS 7-də təqdim edilmiş SpriteKit, sprite-lərin render edilməsi, animasiya, fizika, hissəciklər və səslə işləmək üçün yüksək səviyyəli API təqdim edir. Freymvork Xcode və Interface Builder ilə inteqrasiya olunub, bu da oyun səhnələrinin yaradılmasını asanlaşdırır.

Unity kimi oyun mühərriklərindən fərqli olaraq, SpriteKit Apple platformaları üçün optimallaşdırılıb və Metal API vasitəsilə aparat sürətləndirməsindən istifadə edir. Bu, mobil cihazlarda aşağı enerji sərfiyyatını və hətta köhnə iPhone modellərində yüksək performansı təmin edir. Metal vasitəsilə renderləmə iOS 12 və daha yeni olan bütün cihazlarda mövcuddur.

SpriteKit ekosisteminə GameplayKit (alqoritmlər və AI), AVFoundation (video və səs), Core Image (filtrlər) və ARKit (artırılmış reallıq) ilə inteqrasiya daxildir. Apple (2025) məlumatlarına görə, SpriteKit A17 Pro çipi və daha yeni olan cihazlarda 8K-a qədər təsvir ölçüsünü dəstəkləyir, iPad Pro-da 120 FPS təmin edir.

SpriteKit tarixi

SpriteKit-in ilk versiyası iPhone 5s ilə birlikdə iOS 7-də ortaya çıxdı. Bundan əvvəl tərtibatçılar Core Graphics və ya Cocos2D kimi üçüncü tərəf kitabxanalarından istifadə edirdilər. SpriteKit 2.0 (iOS 10) Metal dəstəyi, şeyderlər (.fsh faylları) və təkmilləşdirilmiş hissəcik sistemi əlavə etdi. SpriteKit 3.0 (iOS 17) Game Controller-ün native dəstəyini və PhysicsKit-in genişləndirilmiş imkanlarını təqdim etdi.

iOS 18 (2024) buraxılışı ilə SpriteKit Swift 6 dəstəyi ilə tam thread təhlükəsizliyi və UIViewRepresentable vasitəsilə SwiftUI ilə inteqrasiya əldə etdi. Bu, SpriteKit-dən təkcə oyunlar deyil, həm də UI animasiyaları, interaktiv qrafiklər və adi tətbiqlər daxilində məlumat vizuallaşdırmaları yaratmaq üçün istifadə etməyə imkan verdi.

SpriteKit arxitekturası: səhnələr və düyünlər

SpriteKit arxitekturası səhnə qrafı (scene graph) üzərində qurulub. Kök element — SKScene, SKNode obyektlərinin ağacını ehtiva edir. Hər bir düyün transformasiyaya (mövqe, fırlanma, miqyas) malikdir və uşaq düyünlər valideynin transformasiyasını miras alır. Bu, mürəkkəb iyerarxiyaların, məsələn, silah əlavə edilmiş personajın yaradılmasını asanlaşdırır.

SKScene — kök konteyner

SKScene — oyun yeniləmə dövrünü idarə edən kök düyündür. update(_ currentTime:) metodu hər kadrdan əvvəl çağırılır və saniyələrlə cari vaxtı qəbul edir. Səhnənin ölçüsü nöqtələrlə (points) müəyyən edilir və scaleMode vasitəsilə ekran ölçüsünə avtomatik miqyaslanır. .aspectFill, .aspectFit, .fill və .resizeFill rejimləri mövcuddur.

swift
import SpriteKit
 
class GameScene: SKScene {
    override func didMove(to view: SKView) {
        self.backgroundColor = SKColor.black
        self.scaleMode = SKSceneScaleMode.aspectFill
         
        let sprite = SKSpriteNode(imageNamed: "player")
        sprite.position = CGPoint(x: 100, y: 100)
        addChild(sprite)
    }
     
    override func update(_ currentTime: TimeInterval) {
        // Hər kadrda oyun məntiqi
    }
}

didMove(to view:) metodu SKView-də səhnə göstərildikdə bir dəfə çağırılır. Orada ilkin obyektlər yaradılır və səhnə parametrləri konfiqurasiya edilir. update metodu hər kadrda yerinə yetirilir və hərəkətlərin hesablanması, toqquşmaların yoxlanılması və oyun vəziyyətinin yenilənməsi üçün istifadə olunur.

SKNode — səhnənin əsas elementi

SKNode — səhnə qrafındakı bütün obyektlər üçün əsas sinifdir. Vizual olaraq göstərilmir, lakin transformasiyaya malikdir və uşaq düyünlərə sahib ola bilər. Əsas alt siniflər: SKSpriteNode (şəkil), SKLabelNode (mətn), SKShapeNode (fiqurlar) və SKEmitterNode (hissəciklər). Hər bir düyün childNode(withName:) vasitəsilə axtarış üçün unikal ada malikdir.

SKShapeNode ixtiyari fiqurlar çəkməyə imkan verir: düzbucaqlılar, dairələr, xətlər və CGPath əsasında yollar. Bu, hazır sprite-lər olmadan oyun obyektlərinin prototipləşdirilməsi üçün faydalıdır. İstehsal üçün SKSpriteNode-dan teksturalarla istifadə etmək tövsiyə olunur, çünki Core Graphics vasitəsilə formaların çəkilməsi teksturaların aparat renderlənməsindən daha yavaşdır.

SpriteKit koordinat sistemi sol tərəfli Dekart koordinat sistemindən istifadə edir, başlanğıc sol aşağı küncdədir. Düyünün mövqeyi valideynə nisbətən CGPoint ilə müəyyən edilir. zPosition xassəsi renderləmə sırasını təyin edir: daha böyük zPosition olan düyünlər daha kiçik dəyəri olanların üstündə çəkilir.

SKView və renderləmə

SKView — SKScene məzmununu göstərən UIView-dir. Renderləmə dövrünü, səhnələrin dəyişdirilməsini və debug məlumatlarını idarə edir. showsFPS xassəsi kadr tezliyinin göstərilməsini, showsNodeCount — səhnədəki düyünlərin sayını, showsPhysics — fiziki cisimlərin vizuallaşdırılmasını debug üçün aktiv edir.

SwiftUI-də SpriteKit SpriteView vasitəsilə daxil edilir — animasiyaları, pauzanı və jestlərlə inteqrasiyanı dəstəkləyən örtük. Apple (2025) məlumatlarına görə, SpriteView UIView ilə eyni Metal GPU rendererindən istifadə edir, performans itkisi olmadan. Bu, SwiftUI daxilində SpriteKit animasiyaları ilə hibrid interfeyslər yaratmağa imkan verir.

SpriteKit-də fizika və animasiyalar

SpriteKit fizika mühərriki qravitasiya, toqquşmalar, sürtünmə və elastiklik dəstəyi ilə bərk cisimlərin simulyasiyasını təmin edir. Hər SKSpriteNode-a physicsBody xassəsi vasitəsilə fiziki cisim təyin edilə bilər. Cisim növləri: .static (hərəkətsiz), .dynamic (qüvvələr altında hərəkət edən) və .kinematic (toqquşmalarla əl ilə idarə olunan).

Fiziki cisimlər və toqquşmalar

SKPhysicsBody düyünün formasını və fiziki xassələrini müəyyən edir. Forma düzbucaqlı, dairəvi və ya CGPath əsasında ixtiyari ola bilər. Hər bir cisim bit maskalarına malikdir: categoryBitMask, collisionBitMask və contactBitMask, toqquşmaları və SKPhysicsContactDelegate vasitəsilə toqquşma bildirişlərini idarə edən.

swift
// Spratenin fizikasının qurulması
let player = SKSpriteNode(imageNamed: "ship")
player.physicsBody = SKPhysicsBody(rectangleOf: player.size)
player.physicsBody?.categoryBitMask = 1
player.physicsBody?.collisionBitMask = 2
player.physicsBody?.contactTestBitMask = 2
 
extension GameScene: SKPhysicsContactDelegate {
    func didBegin(_ contact: SKPhysicsContact) {
        // Toqquşmanın işlənməsi
    }
}

didBegin delegatı iki fiziki cismin toqquşması başladıqda çağırılır. contact obyekti hər iki cismə (bodyA, bodyB) və təmas nöqtəsinə (contactPoint) istinadlar ehtiva edir. Müəyyən kateqoriyalar arasında toqquşmaları aşkar etmək üçün konfiqurasiya olunan toqquşma təbəqələri olan bit maskaları istifadə olunur.

SKActions — kadr kodu olmadan animasiyalar

SKAction — düyünləri update metodunda əl ilə idarə etmədən hərəkət etdirməyə, fırlatmağa, miqyaslamağa və şəffaflığı dəyişməyə imkan verən deklarativ animasiyalar sistemidir. Hərəkətlər ardıcıl (sequence), paralel (group), təkrarlanan (repeatForever) və ya gözləyən (wait) ola bilər.

Düşmən NPC-nin patrul animasiyası nümunəsi:

swift
// Düşmənin patrul animasiyası
let moveRight = SKAction.moveBy(
    x: 200, y: 0, duration: 2.0
)
let moveLeft = SKAction.moveBy(
    x: -200, y: 0, duration: 2.0
)
let wait = SKAction.wait(forDuration: 1.0)
let patrol = SKAction.sequence([moveRight, wait, moveLeft, wait])

enemy.run(SKAction.repeatForever(patrol))

SKActions sistemi A14+ olan cihazlarda performans itkisi olmadan 1000-ə qədər eyni vaxtda yerinə yetirilən hərəkəti dəstəkləyir. Hərəkətlər istənilən SKNode-a, o cümlədən tam iyerarxiyalara tətbiq oluna bilər. Əks əlaqə üçün ardıcıllıq başa çatdıqdan sonra yerinə yetirilən completion bölməsi nəzərdə tutulub.

SKEmitterNode hissəcik sistemi

SKEmitterNode — tüstü, od, yağış və partlayış kimi hissəcik effektləri yaratmaq üçün ixtisaslaşmış düyündür. Emitter parametrləri Xcode-da .sks faylı və ya proqram vasitəsilə təyin edilir. Əsas parametrlər: birthRate (generasiya sürəti), lifetime (hissəciklərin ömür müddəti), speed (sürət) və alphaSpeed (solma sürəti).

Apple (2024) məlumatlarına görə, SKEmitterNode GPU üçün optimallaşdırılıb və 60 FPS tezliyində eyni vaxtda 10 min hissəcikə qədər dəstəkləyir. Hissəciklər teksturlu və animasiyalı ola bilər. Mürəkkəb effektlər üçün müxtəlif parametrli bir neçə emitentin bir-birinin üstünə qoyulması tövsiyə olunur.

SpriteKit-də 2D oyunların hazırlanması

SpriteKit-də inkişaf kontrollerdə və ya SwiftUI View-da SKView-in konfiqurasiyası ilə başlayır. Bundan sonra oyun dünyasının təsvir olunduğu SKScene alt sinfi yaradılır. SpriteKit Xcode-da səhnə redaktorunu (.sks faylları) dəstəkləyir, kod yazmadan düyünləri vizual yerləşdirməyə və xassələri konfiqurasiya etməyə imkan verir.

Səhnələrin idarə edilməsi və keçidlər

SKTransition səhnələr arasında animasiyanı idarə edir. Mövcud növlər: fade, moveIn, push, reveal, flip, doors və crossFade. Keçidin müddəti saniyələrlə təyin edilir. Keçidlər istiqamətləndirilə bilər (sol, sağ, yuxarı, aşağı) və konteynerin rəng doldurulması ilə birləşdirilə bilər.

swift
// Səhnələr arasında keçid
let newScene = GameScene(size: self.size)
let transition = SKTransition.push(
    with: SKDirection.up, duration: 0.5
)
self.view?.presentScene(newScene, transition: transition)

presentScene(_:transition:) metodu cari səhnəni animasiya ilə yenisi ilə əvəz edir. Çağırmazdan əvvəl cari səhnəni dayandırmaq və səsləri dayandırmaq tövsiyə olunur. Əvvəlki səhnəyə qayıtmaq üçün presentScene əks keçid istiqaməti ilə istifadə olunur. Apple məlumatlarına görə, push keçidləri iOS-da fade-dən daha native görünür.

Toxunma və jestlərin idarə edilməsi

SpriteKit-də girişin idarə edilməsi SKScene metodlarının dəyişdirilməsi ilə həyata keçirilir: touchesBegan, touchesMoved, touchesEndedtouchesCancelled. Hər metod toxunmalar dəsti (Set) və hadisə (UIEvent) alır. Toxunma altındakı düyünü müəyyən etmək üçün səhnədə atPoint(_:) metodu istifadə olunur.

Geympad dəstəyi üçün SpriteKit GameController freymvorku vasitəsilə GCController ilə inteqrasiya olunur. iOS 18-də fiziki kontrolleri olmayan oyunlar üçün ekranda virtual kontroller dəstəyi əlavə edilib. Apple (2025) məlumatlarına görə, SpriteKit oyunlarının 30%-dən çoxu standart API vasitəsilə geympadları dəstəkləyir.

SpriteKit-də audio

SKAudioNode səhnə məkanında yerləşdirmə ilə səslərin və musiqinin ifasını təmin edir. Səslər düyünlərə bağlanır və onlarla birlikdə hərəkət edir. AAC, MP3, WAV və ALAC formatları dəstəklənir. Fon musiqisi üçün AVFoundation-dan AVAudioPlayer, qısa səs effektləri üçün SKAction.playSoundFileNamed istifadə olunur.

Audio mikser sistemi səs qruplarının səsini tənzimləməyə imkan verir: musiqi, effektlər, səs. Apple (2024) məlumatlarına görə, SpriteKit səslərin səsini səhnə kamerasına olan məsafəyə uyğun avtomatik tənzimləyir, əlavə kod olmadan məkan səslənmə effekti yaradır.

SpriteKit alətləri və optimallaşdırma

SpriteKit optimallaşdırması sprite sheet-lərdən (tekstur atlaslarından) istifadə etməklə başlayır. SKTextureAtlas çoxlu sprite-ləri bir teksturada birləşdirir, render çağırışlarının (draw calls) sayını bir neçə yüzdən 1–2-ə endirir. Xcode layihə qurarkən şəkil qovluqlarından avtomatik atlaslar yaradır.

Sprite Sheets və batching

SKTextureAtlas atlasdan bütün sprite-ləri bir giriş-çıxış əməliyyatı ilə yükləyir. Apple (2025) məlumatlarına görə, atlasların istifadəsi səhnənin yüklənmə müddətini ayrı-ayrı teksturaların yüklənməsi ilə müqayisədə 60–70% qısaldır. Atlaslar GPU-da keşlənir və səhnələrin dəyişdirilməsi zamanı təkrar yükləmə tələb etmir.

SpriteKit-də avtomatik batching eyni teksturalı SKSpriteNode-ları bir draw call-da birləşdirir. Maksimum səmərəlilik üçün səhnədə 10–15-dən çox unikal tekstura istifadə etməmək tövsiyə olunur. WWDC 2024 məlumatlarına görə, toplu renderləmə FPS düşmədən bir draw call-da 500 sprite-ə qədər işləyir.

Profilinq alətləri

Xcode SpriteKit Debugger real vaxtda səhnə qrafının vizual görünüşünü təqdim edir. Alət düyünlərin sayını, draw calls, FPS və yaddaş istifadəsini göstərir. Düyün sinifləri üzrə filtr darboğazları tapmağa imkan verir: məsələn, SKShapeNode SKSpriteNode-dan daha yavaş render olunur.

Instruments SpriteKit Profiler şablonu ilə hər bir düyünün render vaxtı haqqında ətraflı məlumat verir. Apple (2025) məlumatlarına görə, ən çox yayılmış performans problemləri: çox sayda hissəcik (10 mindən çox), SKPhysicsBody üçün mürəkkəb CGPath və düyünlərin tez-tez yaradılması/silinməsi. Düyünlərin obyekt hovuzu vasitəsilə təkrar istifadəsi tövsiyə olunur.

ARKit ilə inteqrasiya

SpriteKit ARKit tətbiqləri üçün 2D örtük kimi istifadə edilə bilər. ARSKView SKView-i genişləndirir və SpriteKit səhnəsini ARKit kamerası ilə avtomatik sinxronlaşdırır. Artırılmış reallıqdakı obyektlər ARAnchor vasitəsilə real dünyaya nisbətən yerləşdirmə ilə sprite-lər kimi təqdim edilə bilər.

Apple (2025) məlumatlarına görə, ARSKView AR oyunları, məlumat örtükləri və interaktiv təlimatlar yaratmaq üçün istifadə olunur. Məsələn, SpriteKit sprite-ləri kameranın yönəldiyi obyektlərin adlarını və ya mebel yığma animasiyalı göstərişləri göstərə bilər. ARSKView performansı vahid Metal rendereri sayəsində SKView-dən geri qalmır.

Tez-tez verilən suallar

SpriteKit nədir və nə üçün istifadə olunur?

SpriteKit — Apple-ın iOS, macOS, tvOS və watchOS-da 2D oyunlar və interaktiv qrafika yaratmaq üçün freymvorkudur. Metal vasitəsilə aparat sürətləndirməsi ilə kazual oyunların, UI animasiyalarının və interaktiv vizuallaşdırmaların hazırlanması üçün istifadə olunur.

SpriteKit-də hansı düyün növləri mövcuddur?

Əsas növlər: SKSpriteNode (sprite), SKLabelNode (mətn), SKShapeNode (forma), SKEmitterNode (hissəciklər), SKVideoNode (video) və SKAudioNode (səs). Hər düyün SKNode-dan miras alır və transformasiya və animasiyaları dəstəkləyir.

SKAction və əl ilə update arasında fərq nədir?

SKAction — update-də kod olmadan avtomatik yerinə yetirilən deklarativ animasiya. Əl ilə update hər kadr üzərində tam nəzarət verir. SKAction tipik hərəkətlər üçün daha sadədir, update — mürəkkəb fizika və prosedur generasiya üçün.

SpriteKit performansını necə optimallaşdırmaq olar?

Teksturaları birləşdirmək üçün SKTextureAtlas istifadə edin, səhnədə unikal tekstura sayını 10–15-lə məhdudlaşdırın və düyünləri hovuz vasitəsilə təkrar istifadə edin. Xcode SpriteKit Debugger vasitəsilə profil edin və istehsalda SKShapeNode-dan qaçın.

SpriteKit SwiftUI ilə istifadə edilə bilərmi?

Bəli, SpriteView vasitəsilə — SwiftUI üçün SpriteKit örtüyü. SpriteView animasiyaları, pauzanı və SwiftUI jestləri ilə inteqrasiyanı dəstəkləyir. Bu, adi tətbiq daxilində oyun elementləri olan hibrid interfeyslər yaratmağa imkan verir.

Yekun

  • SpriteKit — Metal vasitəsilə renderləmə ilə Apple-ın 2D qrafika freymvorku
  • Səhnə qrafı SKNode-dan — transformasiyaların miras alınması ilə arxitekturanın əsası
  • SKScene yeniləmə dövrünü, fizikanı və səhnələr arası keçidləri idarə edir
  • SKPhysicsBody toqquşmalarla bərk cisimlərin simulyasiyasını təmin edir
  • SKActions kadr kodu olmadan deklarativ animasiyalar yaratmağa imkan verir
  • SKTextureAtlas draw calls-ı azaldır və səhnənin yüklənməsini sürətləndirir
  • İnteqrasiya ARKit, GameplayKit və SwiftUI ilə freymvorkun imkanlarını genişləndirir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun