PHP týden Předvánoční slevová akce
Pouze tento týden sleva až 80 % na PHP e-learning!
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde

Lekce 1 - Úvod do tvorby iOS her s frameworkem SpriteKit

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítejte v tutoriálu, který vám ukáže, jak lze pomocí šikovného frameworku SpriteKit vyvíjet 2D hry v jazyce Swift pro Apple zařízení. Vaše tvorba potom může běžet na počítačích Mac, mobilních telefonech iPhone, tabletech iPad nebo třeba na televizi díky zařízení Apple TV.

Úvodní lekce nás seznámí se SpriteKit a motivací proč si zkusit vyvíjet hry. Řekneme si, co byste měli znát a vytvoříme první projekt. Popíšeme si šablonu a trošku ji vyčistíme od zbytečných věcí.

Proč vyvíjet hry?

Protože je to zábava a trh zejména pro iOS je plný lidí ochotných za originální hru zaplatit. Pokud jste hráči, tak jste určitě přemýšleli, že by bylo zajímavé si něco vlastního zkusit naprogramovat nebo vás možná zajímalo, jak hry na pozadí vlastně fungují. Osobně nevím proč a je mi to kapku trapné přiznat, ale vždy jsem si myslel, že hry jsou něco velmi komplikovaného a vůbec se mi do nich nechtělo. A to i v době, kdy jsem za sebou měl již pár let programování aplikací. Pak jsem ale díky SpriteKit zjistil, že to není tak těžké. Tím samozřejmě neříkám, že jsou hry jednoduché - potřebujete textury, hudbu, zvuky pro efekty, navrhnout dobře gameplay, úrovně... Ale samotné programování již není takový problém. Doufám tedy, že si něco málo zkusíte i v případě, že se jinak nemáte v plánu hrám věnovat.

Hello SpriteKit

Proč vlastně používat pro hry framework? No hlavně z důvodu, že se od tradičních aplikací hry podstatně liší. Pomocí UIKit hru vytvoříte, ale bude to dost náročné, pokud nejde o speciální případ hry, jako je třeba Hangman (Šibenice). Framework za vás vyřeší kolize, simulaci gravitace a další fyzikální oříšky a mnoho a mnoho dalšího.

SpriteKit logo

V tutoriálu budeme využívat SpriteKit, což je oficiální framework od Apple pro vývoj 2D her. Dvourozměrné hry představují skvělý start pro začátek vývoje, řešíte jen dvě osy a vaše herní objekty mohou být jednoduché 2D obrázky, nemusíte tedy shánět 3D modely.

SpriteKit je optimalizovaný pro Apple zařízení a i na starších z nich vám poběží hry bez problémů na 60 FPS. Nabízí skvělé možnosti pro akce, kterými hru rozpohybujete, vyřešené kolize či třeba částicové efekty, takže dostat do hry hezký výbuch nebo třeba sníh je otázkou několika minut.

Co je potřeba?

  • Xcode - ideálně nejnovější verze (v době psaní Xcode 11)
  • Ideálně iPhone nebo iPad na testování
  • Pokročilé znalosti Swiftu (OOP, kolekce)
  • Chuť se něco nového naučit

Vytvoření projektu

Zapneme Xcode a na úvodní obrazovce zvolíme vytvořit nový projekt. To byste již měli důkladně znát. Vybereme platformu iOS a Game jako šablonu:

Template hry v Xcode

Jako název zvolíme GalaxyInvaders, jazyk samozřejmě Swift a jako herní technologii SpriteKit:

Vytvoření SpriteKit projektu v Xcode
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Pak už si jen vyberete, kam na disku nový projekt uložit a máme vytvořeno. Teď je třeba provést úvodní konfiguraci. Abychom si vývoj hry zjednodušili, tak budeme programovat pouze pro jeden typ zařízení a orientaci displeje. Já preferuji iPad, ale hádám, že iPhone bude mít větší část z vás, takže vybereme iPhone a necháme zaškrtnuté pouze "Portrait" v orientaci.

Je to v nastavení projektu, záložka "General" a část "Deployment Info". Měli byste to mít po založení projektu automaticky otevřené:

Pročistění šablony

Vytvořený projekt obsahuje z nějakého důvodu spoustu extra kódu a dalších věcí, které nevyužijeme a projekt by znepřehledňovaly. V prvním kroku tedy projekt pročistíme.

Smažeme soubor Action.sks, otevřeme GameScene.sks a smažeme label hlásající "Hello, World!". Jako poslední k uklizení máme soubor GameScene.swift. Jeho pročištěná verze by měla vypadat takto:

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    override func didMove(to view: SKView) {
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    }

    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
    }
}

Prohlídka strukturou projektu

Když se podíváte, jaké soubory náš projekt obsahuje, měla by vám struktura přijít dost povědomá. Máme tu AppDelegate.swift, Main.storyboard a další. Dokonce tu je i GameViewController.swift. Když si tento poslední soubor otevřete, všimnete si, že tu máme starý známý UIKit a jedná se vlastně o obyčejný UIViewController, který načítá objekt herní scény GameScene.sks a ten zobrazuje.

Nás bude zajímat primárně GameScene.swift, protože téměř nebudeme využívat vizuální editory. Kód nám umožní přesně vidět, co se ve hře děje a je mnohem méně náchylný na změny v Xcode. Hlavní metoda v GameScene.swift je didMove(to: ). Je to vlastně takový ekvivalent viewDidLoad(). Zavolána je vždy ve chvíli, kdy je daná scéna zobrazená, takže právě zde voláme metody, které celou hru připraví a načtou. Další je update(), která je volána před každým vykreslením snímku. Zde se např. kontroluje, aby se hráč nedostal mimo obrazovku nebo odstraňujeme objekty, které již nejsou vidět.

touchesBegan() je zavolána vždy, když se hráč dotkne displeje. Dostaneme sadu "dotyků" a můžeme třeba zjistit, jestli se uživatel dotkl protivníka nebo např. nějakého textu v menu. Smazané touchesMoved() a touchesEnded() bychom použili v případě, že by hráč měl za úkol "tahat" prstem po displeji. Třeba kdybychom dělali něco ve stylu Fruit Ninja.

Příprava grafiky

Naše budoucí hra potřebuje nějaké ty textury. Minimálně potřebujeme vesmírnou loď pro hráče, nějaké ty nepřátele a hezké pozadí. Později vytvoříme tzv. parallax scroll, který ve 2D hrách dodává efekt hloubky, kdy se jedna část pozadí hýbe rychleji než druhá.

Skvělým zdrojem materiálů je Kenney.nl, kde najdete přes 40 000 obrázků, 3D modelů či audio souborů pro vaše hry. Jsou zdarma s licencí CC0 1.0 Universal, takže je můžete svobodně používat i v komerčních projektech a nemusíte uvádět zdroj.

Tvůrce můžete podpořit přes donate nebo si koupit jeden z Game Assets balíčků, stojí zhruba $10 a najdete v něm více něž 20 000 položek pro tvorbu her. To je prostě a jednoduše super výhodné a skoro zdarma vzhledem k tomu, co vše dostanete.

Potřebné textury

Pojďme si shrnout, co zatím potřebujeme:

  • Obrázek pro loď hráče
  • Vesmírné pozadí (nejlépe 750 x 1334 pixelů)
  • Nepřátele (alespoň jeden obrázek, klidně více)

Vybrat si můžete takové, co se líbí vám, je to přeci jen vaše hra :-) V kódu se bude s obrázky pracovat stejně a ukážeme si, jak náhodně vybrat nepřátele, pokud budete mít více textur.

Níže vidíte textury, co jsem si vybral já. Pozadí jsem našel na www.pexels.com a trošku upravil, aby bylo tmavší a hvězdy nebyly tak výrazné:

Obrázek lodi použiji následující:

A dále použiji tyto obrázky nepřátel:

Na příští lekci, Pozadí, ovládání hráče a částicové efekty ve SpriteKit, si tedy připravte obrázky a začneme vytvářet naši hru.


 

Stáhnout

Staženo 2x (97.11 kB)
Aplikace je včetně zdrojových kódů v jazyce Swift

 

 

Článek pro vás napsal Filip Němeček
Avatar
Jak se ti líbí článek?
1 hlasů
Autor se věnuje vývoji iOS aplikací (občas macOS) či těch webových ve frameworku Django. Twitter: @nemecek_f | GitHub nemecek-filip
Všechny články v sekci
Tvorba iOS her ve Swift
Miniatura
Následující článek
Pozadí, ovládání hráče a částicové efekty ve SpriteKit
Aktivity (4)

 

 

Komentáře

Avatar
Radek
Člen
Avatar
Radek:8. prosince 18:17

Díky za sérii, konečně mě to rozhoupalo zkusit po pár jednoduchých aplikací i nějakou hru, ideálně pro AppleTV a ovladač. Mám tu na to dva malé poraděnky, kteří provedou nemilosrdnou review :-)

 
Odpovědět
8. prosince 18:17
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Filip Němeček
Redaktor
Avatar
Odpovídá na Radek
Filip Němeček:8. prosince 18:28

Super! To rád slyším :-) hry jsou sranda

 
Odpovědět
8. prosince 18:28
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.