SpriteKit je framework od Apple pro vývoj 2D her na iOS, macOS, tvOS a watchOS. Poskytuje hotové komponenty pro práci s grafikou, fyzikou, animací a zvukem, což umožňuje vývojářům soustředit se na hratelnost. Podle údajů Apple WWDC (2025) je SpriteKit používán ve více než 200 tisících aplikací v App Store.
Hlavní body
SpriteKit je framework pro 2D grafiku a hry, součást SDK Apple. Představen v roce 2013 na iOS 7, SpriteKit poskytuje vysokoúrovňové API pro vykreslování spriteů, práci s animací, fyzikou, částicemi a zvukem. Framework je integrován s Xcode a Interface Builder, což usnadňuje vytváření herních scén.
Na rozdíl od herních enginů jako Unity je SpriteKit optimalizován pro platformy Apple a využívá hardwarovou akceleraci prostřednictvím Metal API. To zajišťuje nízkou spotřebu energie na mobilních zařízeních a vysoký výkon i na starších modelech iPhone. Vykreslování přes Metal je dostupné na všech zařízeních s iOS 12 a novějším.
Ekosystém SpriteKit zahrnuje integraci s GameplayKit (algoritmy a AI), AVFoundation (video a zvuk), Core Image (filtry) a ARKit (rozšířená realita). Podle údajů Apple (2025) SpriteKit podporuje rozlišení až 8K na zařízeních s čipem A17 Pro a novějším, poskytuje 120 FPS na iPad Pro.
První verze SpriteKit se objevila v iOS 7 spolu s iPhone 5s. Předtím vývojáři používali Core Graphics nebo knihovny třetích stran jako Cocos2D. SpriteKit 2.0 (iOS 10) přidal podporu pro Metal, shadery (soubory .fsh) a vylepšený systém částic. SpriteKit 3.0 (iOS 17) představil nativní podporu Game Controller a rozšířené možnosti PhysicsKit.
S vydáním iOS 18 (2024) získal SpriteKit podporu Swift 6 s úplnou bezpečností vláken a integrací s SwiftUI přes UIViewRepresentable. To umožnilo používat SpriteKit nejen pro hry, ale také pro UI animace, interaktivní grafy a vizualizace dat v běžných aplikacích.
Architektura SpriteKit je postavena na grafu scény (scene graph). Kořenovým prvkem je SKScene, který obsahuje strom objektů SKNode. Každý uzel má transformaci (pozice, rotace, měřítko) a podřízené uzly dědí transformaci rodiče. To zjednodušuje vytváření složitých hierarchií, například postavy s připojenou zbraní.
SKScene je kořenový uzel řídící cyklus aktualizace hry. Metoda update(_ currentTime:) je volána před každým snímkem a přijímá aktuální čas v sekundách. Velikost scény se nastavuje v bodech (points) a automaticky se přizpůsobuje velikosti obrazovky pomocí scaleMode. Dostupné režimy: .aspectFill, .aspectFit, .fill a .resizeFill.
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) {
// Herní logika každý snímek
}
}
Metoda didMove(to view:) je volána jednou při zobrazení scény v SKView. V ní se vytvářejí počáteční objekty a konfigurují parametry scény. Metoda update se provádí každý snímek a používá se pro výpočet pohybů, kontrolu kolizí a aktualizaci stavu hry.
SKNode je základní třída pro všechny objekty v grafu scény. Není vizuálně zobrazen, ale obsahuje transformaci a může mít podřízené uzly. Hlavní podtřídy: SKSpriteNode (obrázek), SKLabelNode (text), SKShapeNode (tvary) a SKEmitterNode (částice). Každý uzel má jedinečný název pro vyhledávání pomocí childNode(withName:).
SKShapeNode umožňuje kreslit libovolné tvary: obdélníky, kruhy, čáry a cesty založené na CGPath. To je užitečné pro prototypování herních objektů bez hotových spriteů. Pro produkci se doporučuje používat SKSpriteNode s texturami, protože vykreslování tvarů přes Core Graphics je pomalejší než hardwarové vykreslování textur.
Souřadnicový systém SpriteKit používá levotočivý kartézský souřadnicový systém s počátkem v levém dolním rohu. Pozice uzlu se nastavuje v CGPoint vzhledem k rodiči. Vlastnost zPosition určuje pořadí vykreslování: uzly s vyšším zPosition se kreslí nad uzly s nižší hodnotou.
SKView je UIView, který zobrazuje obsah SKScene. Řídí cyklus vykreslování, přepínání scén a informace pro ladění. Vlastnost showsFPS zapíná zobrazení snímkové frekvence, showsNodeCount — počet uzlů na scéně, showsPhysics — vizualizaci fyzikálních těles pro ladění.
V SwiftUI se SpriteKit vkládá přes SpriteView — obálku podporující animace, pauzu a integraci s gesty. Podle údajů Apple (2025) SpriteView používá stejný Metal GPU renderer jako UIView, bez ztráty výkonu. To umožňuje vytvářet hybridní rozhraní s SpriteKit animacemi v rámci SwiftUI.
Fyzikální engine SpriteKit poskytuje simulaci tuhých těles s podporou gravitace, kolizí, tření a pružnosti. Každému SKSpriteNode lze přiřadit fyzikální těleso pomocí vlastnosti physicsBody. Typy těles: .static (nepohyblivé), .dynamic (pohyblivé působením sil) a .kinematic (ručně řízené s kolizemi).
SKPhysicsBody určuje tvar a fyzikální vlastnosti uzlu. Tvar může být obdélníkový, kruhový nebo libovolný na základě CGPath. Každé těleso má bitové masky: categoryBitMask, collisionBitMask a contactBitMask, které řídí kolize a oznámení o kolizích prostřednictvím SKPhysicsContactDelegate.
// Nastavení fyziky spritu
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) {
// Zpracování kolize
}
}
Delegát didBegin je volán při zahájení kolize dvou fyzikálních těles. Objekt contact obsahuje odkazy na obě tělesa (bodyA, bodyB) a bod kontaktu (contactPoint). Pro detekci kolizí mezi určitými kategoriemi se používají bitové masky s konfigurovatelnými kolizními vrstvami.
SKAction je systém deklarativních animací umožňující pohyb, otáčení, škálování a změnu průhlednosti uzlů bez ručního řízení v metodě update. Akce mohou být prováděny sekvenčně (sequence), paralelně (group), opakovaně (repeatForever) nebo čekající (wait).
Příklad animace hlídkování nepřátelského NPC:
// Hlídková animace nepřítele
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))
Systém SKActions podporuje až 1000 současně prováděných akcí bez snížení výkonu na zařízeních s A14+. Akce lze aplikovat na libovolný SKNode, včetně celých hierarchií. Pro zpětnou vazbu je určena sekce completion, která se provádí po dokončení sekvence.
SKEmitterNode je specializovaný uzel pro vytváření částicových efektů: kouře, ohně, deště a výbuchů. Parametry emitoru se nastavují pomocí souboru .sks v Xcode nebo programově. Klíčové parametry: birthRate (rychlost generování), lifetime (životnost částic), speed (rychlost) a alphaSpeed (rychlost slábnutí).
Podle údajů Apple (2024) je SKEmitterNode optimalizován pro GPU a podporuje až 10 tisíc částic současně s frekvencí 60 FPS. Částice mohou být texturované a animované. Pro složité efekty se doporučuje kombinovat několik emitorů s různými parametry a vrstvit je přes sebe.
Vývoj na SpriteKit začíná konfigurací SKView v kontroleru nebo SwiftUI View. Poté se vytvoří podtřída SKScene, ve které je popsán herní svět. SpriteKit podporuje editor scén v Xcode (soubory .sks), umožňující vizuální umístění uzlů a konfiguraci vlastností bez psaní kódu.
SKTransition řídí animaci mezi scénami. Dostupné typy: fade, moveIn, push, reveal, flip, doors a crossFade. Doba trvání přechodu se nastavuje v sekundách. Přechody mohou být směrové (vlevo, vpravo, nahoru, dolů) a kombinované s barevnou výplní kontejneru.
// Přechod mezi scénami
let newScene = GameScene(size: self.size)
let transition = SKTransition.push(
with: SKDirection.up, duration: 0.5
)
self.view?.presentScene(newScene, transition: transition)
Metoda presentScene(_:transition:) nahrazuje aktuální scénu novou s animací. Před voláním se doporučuje pozastavit aktuální scénu a zastavit zvuky. Pro návrat na předchozí scénu se používá presentScene s opačným směrem přechodu. Podle Apple vypadají push přechody na iOS přirozeněji než fade.
Ve SpriteKit se zpracování vstupu realizuje přepsáním metod SKScene: touchesBegan, touchesMoved, touchesEnded a touchesCancelled. Každá metoda obdrží sadu dotyků (Set
Pro podporu gamepadů se SpriteKit integruje s GCController přes framework GameController. V iOS 18 byla přidána podpora virtuálního ovladače na obrazovce pro hry bez fyzického ovladače. Podle údajů Apple (2025) více než 30 % her na SpriteKit podporuje gamepady přes standardní API.
SKAudioNode zajišťuje přehrávání zvuků a hudby s umístěním v prostoru scény. Zvuky se vážou k uzlům a pohybují se s nimi. Podporované formáty: AAC, MP3, WAV a ALAC. Pro hudbu na pozadí se používá AVAudioPlayer z AVFoundation, pro krátké zvukové efekty — SKAction.playSoundFileNamed.
Systém audio mixeru umožňuje nastavení hlasitosti skupin zvuků: hudby, efektů, hlasu. Podle údajů Apple (2024) SpriteKit automaticky přizpůsobuje hlasitost zvuků vzdálenosti od kamery scény, čímž vytváří efekt prostorového zvuku bez dalšího kódu.
Optimalizace SpriteKit začíná používáním sprite sheetů (atlasů textur). SKTextureAtlas spojuje více spriteů do jedné textury, čímž snižuje počet vykreslovacích volání (draw calls) z několika stovek na 1–2. Xcode automaticky vytváří atlasy ze složek s obrázky při sestavení projektu.
SKTextureAtlas načítá všechny spritely z atlasu jednou I/O operací. Podle údajů Apple (2025) používání atlasů zkracuje dobu načítání scény o 60–70 % ve srovnání s načítáním jednotlivých textur. Atalasy se ukládají do mezipaměti GPU a nevyžadují opětovné načítání při přepínání scén.
Automatické dávkování (batching) ve SpriteKit spojuje SKSpriteNode se stejnými texturami do jednoho draw call. Pro maximální účinnost se doporučuje používat nejvýše 10–15 unikátních textur na scénu. Podle WWDC 2024 dávkové vykreslování zpracovává až 500 spriteů v jednom draw call bez snížení FPS.
Xcode SpriteKit Debugger poskytuje vizuální náhled grafu scény v reálném čase. Nástroj ukazuje počet uzlů, draw calls, FPS a využití paměti. Filtrování podle tříd uzlů umožňuje najít úzká místa: například SKShapeNode se vykresluje pomaleji než SKSpriteNode.
Instruments se šablonou SpriteKit Profiler poskytuje podrobné informace o době vykreslování každého uzlu. Podle údajů Apple (2025) jsou nejčastější problémy s výkonem: příliš mnoho částic (více než 10 tisíc), složitý CGPath pro SKPhysicsBody a časté vytváření/mazání uzlů. Doporučuje se znovu používat uzly prostřednictvím fondu objektů.
SpriteKit lze použít jako 2D překryv pro aplikace ARKit. ARSKView rozšiřuje SKView a automaticky synchronizuje scénu SpriteKit s kamerou ARKit. Objekty v rozšířené realitě mohou být reprezentovány spritely s umístěním vůči reálnému světu prostřednictvím ARAnchor.
Podle údajů Apple (2025) se ARSKView používá pro vytváření AR her, informačních překryvů a interaktivních instrukcí. Například SpriteKit spritely mohou zobrazovat názvy objektů, na které kamera míří, nebo animované návody na sestavení nábytku. Výkon ARSKView není horší než SKView díky jednotnému Metal rendereru.
Často kladené otázky
SpriteKit je framework Apple pro vytváření 2D her a interaktivní grafiky na iOS, macOS, tvOS a watchOS. Používá se pro vývoj kauzálních her, UI animací a interaktivních vizualizací s hardwarovou akcelerací přes Metal.
Hlavní typy: SKSpriteNode (sprite), SKLabelNode (text), SKShapeNode (tvar), SKEmitterNode (částice), SKVideoNode (video) a SKAudioNode (zvuk). Každý uzel dědí z SKNode a podporuje transformace a animace.
SKAction je deklarativní animace prováděná automaticky bez kódu v update. Ruční update poskytuje plnou kontrolu nad každým snímkem. SKAction je jednodušší pro typické pohyby, update — pro složitou fyziku a procedurální generování.
Používejte SKTextureAtlas pro spojování textur, omezte počet unikátních textur na 10–15 na scénu a znovu používejte uzly přes fond. Profilujte přes Xcode SpriteKit Debugger a vyhněte se SKShapeNode v produkci.
Ano, přes SpriteView — obálku SwiftUI pro SpriteKit. SpriteView podporuje animace, pauzu a integraci s gesty SwiftUI. To umožňuje vytvářet hybridní rozhraní s herními prvky v běžné aplikaci.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také