+ All Categories
Home > Documents > Vývoj her pro iPhone a iPAD

Vývoj her pro iPhone a iPAD

Date post: 28-Mar-2016
Category:
Upload: zoner-software-as
View: 220 times
Download: 0 times
Share this document with a friend
Description:
Vývoj her pro iPhone a iPAD
34
VÝVOJ HER pro iPhone a iPad Programování pro iOS Patrick Alessi E N C Y K L O P E D I E Z O N E R P R E S S
Transcript
Page 1: Vývoj her pro iPhone a iPAD

VÝVOJ HERpro iPhone a iPad

Programování pro iOS

Patrick Alessi

E N C Y K L O P E D I E Z O N E R P R E S S

Page 2: Vývoj her pro iPhone a iPAD
Page 3: Vývoj her pro iPhone a iPAD

Patrick Alessi

Vývoj her pro iPhone a iPad

Programování pro iOS

Page 4: Vývoj her pro iPhone a iPAD

BEGINNING IOS GAME DEVELOPMENTPatrick Alessi

Published by Wiley Publishing, Inc., 10475 Crosspoint Boulevard, Indianapolis, IN 46256, www.wiley.com. Copyright © 2012 by Patrick Alessi.

© Translation: ZONER soft ware, a.s., 2012.

All Rights Reserved. Th is translation published under license with the original publisher John Wiley & Sons, Inc.

Všechna práva vyhrazena. Tento překlad je vydán na základě licenční smlouvy s John Wiley & Sons, Inc.

Vývoj her pro iPhone a iPad – programování pro iOSAutor: Patrick Alessi

Copyright © ZONER soft ware, a.s. Vydání první v roce 2012. Všechna práva vyhrazena.

Zoner PressKatalogové číslo: ZR1202

ZONER soft ware, a.s.Nové sady 18, 602 00 Brno

Překlad: RNDr. Jan PokornýRedaktor: Miroslav KučeraTechnický redaktor: Hana FruhwirtováŠéfredaktor: Ing. Pavel KristiánDTP: Miroslav Kučera, návrh obálky: Dan Zůda Zdrojové soubory ke knize: http://www.zonerpress.cz/download/ios-vyvoj-her.zip

Informace, které jsou v této knize zveřejněny, mohou být chráněny jako patent. Jména produktů byla uvedena bez záruky jejich volného použití. Při tvorbě textů a vyobrazení postupováno s maximální péčí, ale nelze zcela vyloučit možnost výskytu chyb. Vydavatelé a autoři nepřebírají právní odpovědnost ani žádnou jinou záruku za použití chybných údajů a z  toho vyplývajících důsledků. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována ani distribuována žádným způsobem ani prostředkem, ani reprodukována v databázi či na jiném záznamovém prostředku či v jiném systému bez výslovného svolení vydavatele, s výjimkou zveřejnění krátkých částí textu pro potřeby recenzí.

Wiley, the Wiley logo, Wrox, the Wrox logo, and Wrox Programmer to Programmer are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affi liates, in the United States and other countries, and may not be used without written permission. All other trademarks are the property of their respective owners. Th e Wrox brand trade dress is a trademark of John Wiley & Sons, Inc. in the United States and/or other countries. Used by permission.

Wiley, logo Wiley, Wrox, logo Wrox a označení "Programmer to Programmer" jsou ochranné známky John Wiley & Sons, Inc. a jejich poboček, ve Spojených státech a dalších zemích. Nemohou být použity bez předchozího pisemného povolení. Všechny ostatní ochranné známky jsou majetkem příslušných vlastníků. Značka Wrox je ochrannou známkou John Wiley & Sons, Inc., ve Spojených státech a/nebo v dalších zemích.

Veškeré dotazy týkající se distribuce směřujte na:

Zoner Press ZONER soft ware, a.s Nové sady 18, 602 00 Brno

tel.: 532 190 883 e-mail: [email protected] www.zonerpress.cz

ISBN 978-80-7413-199-8

Page 5: Vývoj her pro iPhone a iPAD

Pro Morgan – doufám, že pozorování toho, jak jsem zápolils obtížnou úlohou a nakonec ji zdolal, tě bude inspirovat k témuž.

Page 6: Vývoj her pro iPhone a iPAD

O autoroviPatricka Alessiho fascinovalo psaní počítačových programů od chvíle, kdy v roce 1980 poprvé uviděl, jak se jeho jméno mihlo přes terminál. Od té doby píše software s využitím jakéhokoliv jazyka a hardwarové plat-formy, které se mu dostanou do rukou, včetně krátkého a bolestného výpadu do Fortranu na systému VAX během jeho inženýrských studií. Patrick dosáhnul stupně B. S. (Bachelor of Science) v oboru Civil Enginee-ring na Rutgers University a stupně M. S. (Master of Science) v oboru Computer Science na Stevens Institute of Technology.

Co se týče profesní činnosti, Patrick budoval aplikace zaměřené na zpracování dat pro různorodé klienty, od databází pro malé firmy až k rozsáhlým systémům pro USAF (United States Air Force). Vyvinul také řadu systémů běžících v reálném čase, desktopových aplikací náročných na grafiku a samozřejmě i her. V současné době se soustřeďuje na vývoj aplikací a her pro mobilní zařízení, jako jsou iPhone a iPad.

Když se Patrick dokáže odtrhnout od počítače, fotografuje, cestuje, hraje hry na svém Xboxu a dělá všechno možné se svou rodinou. Na Twitteru ho najdete jako @pwalessi. Samozřejmě také bloguje, jeho blog naleznete na adrese http://iphonedevsphere.blogspot.com.

O odborném editoroviMichael Gilbert pracuje dlouhá léta jako programátor pro různé strojírenské firmy. Hry začal vyvíjet už pro Atari ST a často přispíval do časopisu STart. V průběhu let vyvíjel herní software pro PC a Mac pro klienty po celém světě. Je také zkušeným programátorem ActionScriptu (Flash) a autorem populárního internetového herního prostředí HigherGames – můžete si jej vyzkoušet na www.highergames.com. Nyní se baví vývojem her pro iPhone a iPad. V AppStore má momentálně čtyři hry (Woridgo, Jumpin’Java, Kings Battlefield a Set Pro HD). Ve svém volném čase, kterého má hodně málo, se snaží porazit svou ženu, Janeen, v přívětivé hře Scrabble. Můžete ho najít na Twitteru pod @mija711.

PoděkováníRád využívám této příležitosti, abych mohl poděkovat všem, kdo se podíleli na vzniku této knihy. Mary Jame-sová, moje akviziční editorka, mě vybídla, abych se vrátil k psaní, a pak, když mě přesvědčila, mi pomáhala s rozvojem této knihy. Můj projektový editor, Brian MacDonald, pomáhal usměrňovat proud mých myšlenek tak, aby vznikl použitelný výsledek. Mike Gilbert, můj odborný editor, obětoval mnoho ze svého cenného času, aby zrevidoval mou práci. Chci také poděkovat všem ostatním lidem z redakce a produkce, kteří strávili mnoho hodin na tom, aby tato kniha mohla odejít do tisku.

Nejdůležitějšími lidmi v procesu psaní knihy byly moje žena Cheryl a má nevlastní dcera Morgan. Staraly se o všechno nezbytné, když jsem nebyl schopen plnit své ostatní povinnosti, a zajišťovaly, aby život šel nor-málně dál jako jindy. Snášely také trpělivě mé vrtochy, podivínství a nedostatek času pro zábavné rodinné aktivity, když jsem musel pracovat na knize a věnovat se převážně psaní. Vaše trpělivost se mnou byla opravdu neuvěřitelná! Nakonec chci poděkovat svým rodičům.

Page 7: Vývoj her pro iPhone a iPAD

5

Stručný obsah

Část I – Nástroje pro začátek 15

Kapitola 1 Hry na iOS 17

Kapitola 2 Programovací prostředí Xcode 29

Kapitola 3 Programovací jazyk C 57

Kapitola 4 Programovací jazyk Objective-C 109

Kapitola 5 Framework Cocoa Foundation 153

Část II – Stavební bloky hry 187

Kapitola 6 Kreslení s UIKit a Core Graphics 189

Kapitola 7 Reakce na akce uživatele 237

Kapitola 8 Animování grafi ky 271

Kapitola 9 API pro audio: tvorba zvuků v iOS 309

Kapitola 10 Budování síťové hry s GameKitem 355

Dodatek Odpovědi na cvičení 395

Page 8: Vývoj her pro iPhone a iPAD

6

Podrobný obsah O autorovi 4

O odborném editorovi 4

Poděkování 4

Úvod 12

Pro koho je publikace určena 12

Co naleznete v této knize 13

Jak je tato kniha strukturovaná 13

Co potřebujete pro práci s touto knihou 13

Konvence 14

Zdrojové soubory 14

Část I – Nástroje pro začátek 15

Kapitola 1 Hry na iOS 17

Jaké atributy má dobrá hra pro iOS? 18

Způsob, jakým se zařízení používá 18

Používejte jedinečné schopnosti iOS 18

Hra má být zábavná 19

Grafi ka a návrh 20

Rozvíjení prvotního nápadu 20

Zdokumentování hry 20

Prototyp hry 21

Příprava na psaní kódu 22

Frameworky vztahující se ke hrám 22

Cocoa 23

Kreslení: UIKit a Core Graphics 24

Interakce s uživatelem: Cocoa Touch 25

Animace: Core Animation 25

Zvuk: Core Audio 26

GameKit 27

Shrnutí 27

Co jste se dozvěděli v této kapitole 28

Page 9: Vývoj her pro iPhone a iPAD

7

Kapitola 2 Programovací prostředí Xcode 29

Prostředí pro kódování 30

Vytvoření projektu 30

Navigace po projektu 34

Editování kódu 37

Ladicí nástroje Xcode 44

Přerušování běhu kódu a krokování kódem 44

Dodatečné funkcionality bodu přerušení 47

Budování jednoduchého rozhraní 49

Shrnutí 55

Cvičení 55

Co jste se dozvěděli v této kapitole 56

Kapitola 3 Programovací jazyk C 57

Úvod do jazyka C 57

Proměnné a výrazy 58

Datové typy 58

Operátory 63

Obor 67

Struktury 68

Pole 73

Cykly 76

Cykly for 76

Cykly while a do...while 79

Klíčová slova break a continue 86

Rozhodování o toku vykonávání programu 86

Příkaz if 86

Podmínkový operátor 88

Volba jedné z hodnot příkazem switch 89

Členění kódu do funkcí 91

Ukazatele 96

Ukázka skutečné karetní hry 100

Shrnutí 106

Cvičení 107

Co jste se naučili v této kapitole? 107

Page 10: Vývoj her pro iPhone a iPAD

8

Kapitola 4 Programovací jazyk Objective-C 109

Třídy a objekty 109

Instanční proměnné 110

Metody a zprávy 112

Správa paměti 118

Automatické počítání referencí 120

Dědění 121

Budování podtříd ze základní třídy 121

Překrývání metod základní třídy 124

Polymorfi smus 126

Budování hry v Objective-C 128

Vystavování dat tříd pomocí vlastností 129

Metody defi nované na třídě 132

Implementace třídy MindPlayer 133

Vybudování herního cyklu 143

Shrnutí 150

Cvičení 151

Co jste se dozvěděli v této kapitole 151

Kapitola 5 Framework Cocoa Foundation 153

Architektura Model-View-Controller 153

Vaše první hra iOS 154

Budování uživatelského rozhraní 156

Outlety a akce 157

Zpracování textu s NSString 160

Metody třídy NSString 160

Změnitelné a nezměnitelné typy 160

Porovnávání řetězců 161

Kolekce objektů s NSArray 162

Metody NSArray 162

Modifi kování polí pomocí NSMutableArray 162

Zabalování čísel s NSNumber 163

Další třídy kolekcí 164

Vybudování modelu hry 173

Periodické události a časovače 178

Page 11: Vývoj her pro iPhone a iPAD

9

Shrnutí 185

Cvičení 185

Co jste se dozvěděli v této kapitole 186

Část II – Stavební bloky hry 187

Kapitola 6 Kreslení s UIKit a Core Graphics 189

Úvod do kreslicích frameworků 189

Framework UIKit 190

Framework Core Graphics 191

Kreslicí prostředí 191

Grafi cký kontext 192

Souřadnicový systém UIView 192

Metoda drawRect: 193

Kreslení tvarů s UIBezierPath 194

Specifi kace barev s UIColor 194

Pokročilé kreslení s Core Graphics 202

Stíny 203

Gradienty 204

Zahájení prací na hře Blocker s BlockView 208

Práce s obrázky 214

Třídy pro obrázky 215

Hierarchie zobrazení 215

Animace a časování s CADisplayLink 223

Dokončení hry Blocker 233

Shrnutí 235

Cvičení 235

Co jste se dozvěděli v této kapitole 235

Kapitola 7 Reakce na akce uživatele 237

Události v iOS 237

Událostní architektura 237

Objekty událostí 239

Obsluha vícedotykových událostí 240

Budování jednoduché dotykové hry: Šimon říká 244

Page 12: Vývoj her pro iPhone a iPAD

10

Reakce na pohyb pomocí akcelerometru 261

Rozpoznávání gest 268

Shrnutí 269

Cvičení 269

Co jste se dozvěděli v této kapitole 269

Kapitola 8 Animování grafi ky 271

Animace obrázků s UIImageView 271

Stručný úvod do Core Animation 275

Stručný úvod k anonymním blokům kódu 275

Animování vlastností a přechodů UIView 275

Animování vlastností 276

Animování přechodů 287

Základy Core Animation 297

Rozvržení vrstev 297

Animovatelné vlastnosti 297

Stromy vrstev 304

Shrnutí 307

Cvičení 307

Co jste se dozvěděli v této kapitole 308

Kapitola 9 API pro audio: tvorba zvuků v iOS 309

Přehrávání jednoduchých zvuků se System Sound Services 309

Přehrávání zvuků s frameworkem AV Foundation 311

Třída AVAudioPlayer 311

Stručně k formátu a výkonu 311

Konfi gurace audio relace 312

Simultánní přehrávání zvuků 334

Přehrávání zvuků v cyklu 335

Framework Media Player 344

Shrnutí 353

Cvičení 353

Co jste se dozvěděli v této kapitole 354

Page 13: Vývoj her pro iPhone a iPAD

11

Kapitola 10 Budování síťové hry s GameKitem 355

Úvod do GameKitu 355

Vyrážíme 356

Převod hry na síťovou verzi 376

NSData a NSCoding 376

Konverze třídy na data s archivátory 378

Připojování a odesílání dat 378

Otestování síťové verze hry 389

Shrnutí 392

Cvičení 392

Co jste se dozvěděli v této kapitole 393

Dodatek Odpovědi na cvičení 395

Kapitola 2 395

Kapitola 3 397

Kapitola 4 399

Kapitola 5 401

Kapitola 6 403

Kapitola 7 405

Kapitola 8 406

Kapitola 9 408

Kapitola 10 408

Rejstřík 411

Page 14: Vývoj her pro iPhone a iPAD

12

ÚvodZařízení se systémem iOS poskytují vývojářům jedinečnou a vzrušující platformu pro výrobu her. iPhone znamená, že hráč má k dispozici malinký počítač, který může neustále nosit v kapse. Zařízení iPad poskytuje obdobné herní zážitky, ale s mnohem větší obrazovkou, s větším výkonem a větším množstvím paměti. Tato zařízení umožňují vytvářet hry s jedinečnými ovládacími schématy díky displeji, který s lehkostí reaguje na dotyky, zabudovanému akcelerometru, nebo dokonce gyroskopu (na nejnovějších zařízeních).

Podle vyjádření Scotta Forstalla z celosvětové vývojářské konference Apple z roku 2011 bylo na světě přes 200 miliónů zařízení se systémem iOS. To reprezentuje obrovské publikum pro hry. Například zařízení iPAD se jen v prvních 14 měsících po jeho vydání prodalo přes 25 miliónů kusů. Forstall také řekl, že v AppStore bylo za tři roky staženo celkem 14 miliard aplikací a vývojáři za své úsilí dostali celkem 2,5 miliard dolarů.

Podle firem NewZoo a Distimo zabývajících se průzkumem trhu patří právě hry mezi nejrozsáhlejší kategorii na AppStore. Plná polovina všech stahovaných aplikací, ať už zdarma nebo placených, jsou hry, viz http://www.distimo.com/blog/2011_05_distimo-and-newzoo%C2%A0partner-on-games-data-over--5-million-ios-games-downloaded-per-day-by-63-million-ios-gamers-in-us-eu/. Podle Na-tional Gamers Survey z března 2011 měla platforma iOS více než 60 miliónů hráčů z USA a Evropy.

Jak je z těchto čísel vidět, vytváření her pro platformu iOS má obrovský finanční stimul. Ale nejde jen o pení-ze. Psát hry je především zábava! Pokud rádi píšete zajímavé programy a s oblibou řešíte všelijaké problémy, určitě vás bude bavit psát hry. Hry jsou také velmi expresivní formou programování. Jakožto programátor za-městnaný v obrovské firmě si při své každodenní práci někdy připadám, že už nejméně popadesáté vytvářím stejnou třívrstvou databázi nebo webovou aplikaci. U her je to jinak, protože každá je jiná.

Se správnými nástroji vyvinete hru prakticky z čehokoli, co si dokážete představit. Apple poskytuje zdarma několik báječných nástrojů pro budování her pro iOS. Například vývojové prostředí Xcode je jedno z nejlep-ších, v jakém jsem kdy pracoval. Pokud z programátorské praxe znáte Visual Studio, Eclipse nebo nějaké jiné IDE (integrované vývojové prostředí), budete v Xcode hned jako doma. Společnost Apple také vynaložila spoustu úsilí na vytvoření takových API, které by vám usnadnily využití mnoha předností platformy iOS. Jakmile zvládnete základy, budete schopni se chopit kterékoliv stěžejní technologie a pracovat s ní. Tato kniha vám v tomto úsilí pomůže. Ve většině kapitol knihy budete pracovat se skutečnými a fungujícími hrami. Mys-lím si, že nejlepší způsob, jak se naučit něco nového, je předvést si konkrétní věci a věřím, že při práci s těmito ukázkovými hrami snadněji proniknete do filozofie nástrojů od Apple určených pro budování her.

Pro koho je publikace určenaTato kniha naučí každého, kdo má alespoň nějaké programátorské základy, vytvářet základní hry pro zařízení se systémem iOS, jako jsou iPhone, iPod Touch a iPad. I když tato kniha sice předpokládá, že máte jisté pro-gramátorské zkušenosti, věřím, že ji zvládne i čtenář s minimálními zkušenosti s vývojem her, protože byla záměrně koncipována tak, aby se dala použít i jako startovací čára do světa programování her.

Jestliže už máte nějaké zkušenosti s Javou, C# nebo jiným objektově orientovaným jazykem, tím lépe. Pokud znáte programovací jazyky C a/nebo Objective-C, můžete klidně přeskočit kapitoly 3 a 4, protože se v nich s největší pravděpodobností nedozvíte vůbec nic nového.

V knize se nepřepokládají žádné předchozí zkušenosti s vývojem pro Mac nebo iOS. To byl hlavní faktor, který kladně ovlivnil mé rozhodnutí napsat tuto knihu. Každá kniha o vývoji her pro iOS, se kterou jsem se setkal, předpokládala znalosti základů programování pro iOS. Já to tak nedělám. Začínám vždy od začátku a doprovázím vás celým procesem psaní her pro iOS. Na konci knihy už budete mít vytvořených několik her

Page 15: Vývoj her pro iPhone a iPAD

13

a budete mít za sebou zkušenosti s několika frameworky, s nimiž se kreslí grafika, vytvářejí animace, pracuje se zvukem nebo zpracovávají vstupy od uživatele.

Mějte ale na paměti, že toto je kniha na úrovni "začátečník až mírně pokročilý". Pokud už máte za sebou pub-likaci desítek her pro iOS, tato kniha vám neposkytne moc nových informací. Abych ji udržel srozumitelnou pro začátečníky, vyhýbal jsem se obtížnějším API. Neprobírám například OpenGL pro realizaci grafiky. Nic-méně ale zmiňuji, že tyto pokročilé nástroje existují, vysvětluji jejich smysl a pokouším se navést čtenáře do správného směru, pokud by se rozhodli, že daná pokročilejší technologie bude pro jejich projekt vhodnější.

A konečně, kromě toho, že tato kniha měla být inspirující pro vývojáře her, myslím si, že by mohla být užiteč-ná i pro všechny ostatní vývojáře aplikací na iOS. Koneckonců, API pro grafiku, animace, zvuky a vstupy od uživatele jsou dobře použitelná nejenom pro hry, ale i například pro nějakou nudnou databázovou aplikaci. Kdo ví, možná budete schopni ohromit vaše budoucí zákazníky nebo  klienty oku lahodící animací, nebo budete schopni přijímat vstupy od uživatelů vaší aplikace takovým způsobem, na který jste se ani neodvážili pomyslet předtím, než jste přečetli tuto knihu.

Co naleznete v této knizeJak už jsem uvedl, toto je kniha na úrovni "začátečník až mírně pokročilý", takže zde probírám všechny tech-nologie, které čtenář potřebuje znát, chce-li se pustit do vývoje her. V první části knihy probírám absolutní základy, které je třeba zvládnout, abyste mohli napsat jakýkoli program iOS, ať už je to hra nebo ne. Proberu integrované vývojové prostředí Xcode, s nímž všichni programátoři iOS, včetně těch u společnosti Apple, píší, ladí a testují své programy. Pak proberu programovací jazyky C a Objective-C, s nimiž budete vytvářet nativní aplikace iOS. Nakonec proberu framework Cocoa Foundation, který poskytuje základní funkcionalitu nezbytnou pro psaní programů iOS.

Ve druhé části knihy, poté, co ovládnete základy, proberu nástroje, které budete potřebovat, když se budete chtít pustit do vývoje her. Popíšu několik frameworků od Apple, které poskytují základní funkce nezbytné pro hry. Rozčlenil jsem je do čtyř oblastí: grafika, interakce s uživatelem, animace a samozřejmě zvuk. Až dokon-číte tuto druhou část knihy, budete schopni vyvíjet od samého počátku své vlastní hry.

Každá kapitola druhé části knihy kromě toho předvádí skutečnou hratelnou hru. Až si tyto příklady prostudu-jete, budete schopni sami tyto hry vylepšovat a získat tak další zkušenosti. Tyto ukázkové hry můžete chápat jako praktický úvod do světa vývoje her pro platformu iOS.

Jak je tato kniha strukturovaná Knihu jsem uspořádal tak, aby čtenář, který s vývojem pro iOS teprve začíná, mohl s knihou pracovat od sa-mého začátku až do konce. Doporučuji, abyste tuto knihu četli postupně po jednotlivých kapitolách, protože každá z nich staví na pojmech probraných v předchozích částech. Knihu jsem takto uspořádal, abych čtenáři předložil něco jako návod, ne strohou referenční příručku. Knihu můžete samozřejmě využívat, až ji přečtete, i jako referenční příručku k probraným API. Snažil jsem se ji ovšem napsat tak, aby čtenáře nenápadně dopro-vázela od jednoho tématu k dalšímu. Pokud se naučíte, jak efektivně používat dokumentaci od Apple, budete mít rázem úžasnou referenční základnu. Já ale usiluji o to, abych byl vaším průvodcem po různých API.

Co potřebujete pro práci s touto knihouAbyste mohli budovat aplikace pro iOS, potřebujete počítač Apple s Mac OS X. Kromě toho budete muset nainstalovat vývojové prostředí Xcode. Xcode 4 si můžete stáhnout zdarma z Mac AppStore.

Page 16: Vývoj her pro iPhone a iPAD

14

Zamýšlíte-li provozovat své hry na zařízeních, jako jsou iPhone nebo iPad, a nechcete spouštět svůj kód v si-mulátoru iPhone, je potřeba, abyste se zapojili do vývojářského programu iOS. V době, kdy jsem psal tyto řádky, stálo zapojení do tohoto programu ročně 99 dolarů a opravňovalo vás budovat a spouštět programy na vašem zařízení a odesílat vaše dokončené aplikace do AppStore společnosti Apple k prodeji. Pokud doposud neparticipujete na tomto vývojářském programu, nedělejte si žádné starosti. Téměř všechno, co je popisováno v této knize, bude fungovat správně v iOS simulátoru. Pokud se ale objeví něco, co bude potřeba spustit na fyzickém zařízení se systémem iOS, náležitě na to upozorním v textu.

KonvenceV knize pro větší přehlednost používám několik následujících konvencí.

VYZKOUŠEJTE Oddíl "Vyzkoušejte" je praktické cvičení, které rozhodně doporučujeme projít poté, co dočtete k němu se vztahující text.

1. Obvykle jde o sadu kroků. 2. Každý krok je očíslovaný. 3. Kroky reprodukujte ve své vlastní instanci programu Xcode.

"Jak to funguje" Za každým oddílem "Vyzkoušejte" se podrobně vysvětluje kód, který jste před chvíli napsali.

Pokud jde o styly v textu:Klávesové zkraty uvádíme takto: Ctrl+A.Názvy souborů, URL a kód v textu vypadají takto: persistence.properties.

Samotný zdrojový kód prezentujeme dvojím způsobem:

U většiny příkladů kódu používáme neproporcionální písmo bez zvýraznění.

Tučně zvýrazňujeme kód, který je v aktuálním kontextu obzvlášť důležitý.Tučně zvýrazňujeme kód, který je v aktuálním kontextu obzvlášť důležitý.

Zdrojové souboryProtože tato kniha je určena především programátorům a vývojářům, je logické, že obsahuje spoustu výpisů zdrojového kódu. Tento kód ale nemá smysl přepisovat ručně – místo toho si stáhněte ZIP archiv, který obsa-huje veškerý zdrojový kód příkladů použitých v této knize. Stahujte jej z následující URL adresy:

http://www.zonerpress.cz/download/ios-vyvoj-her.zip

Velikost tohoto souboru ke stažení je 7,4 MB.

Page 17: Vývoj her pro iPhone a iPAD

15

ČÁST INástrojepro začátek

Kapitola 1 Hry na iOS

Kapitola 2 Programovací prostředí Xcode

Kapitola 3 Programovací jazyk C

Kapitola 4 Programovací jazyk Objective-C

Kapitola 5 Framework Cocoa Foundation

Page 18: Vývoj her pro iPhone a iPAD

16

Page 19: Vývoj her pro iPhone a iPAD

17

KAPITOLA 1Hry na iOS

Stručný přehled kapitoly:Dozvíte se o jedinečných schopnostech her na iOS.Rady, jak zdokumentovat a rozvinout své nápady.Vytvoření prototypu a příprava vaší hry tak, abyste mohli začít psát její kód.Přehled o frameworcích v iOS, které se vztahují k hrám.

Protože jste si obstarali tuto knihu a začali ji číst, téměř určitě vás zajímá, jak psát hry pro iOS. Proč byste měli mít chuť napsat nějakou hru? Existuje několik skvělých důvo-dů, proč psát hry pro iOS, zaprvé a především proto, že psát hry je neobyčejně zábavné! Ve hře se můžete zcela odpoutat od všech svazujících omezení reality. Ve své hře totiž určujete pravidla vy a nikdo jiný.

Obzvlášť poutavé může být psaní her pro iOS díky úžasným schopnostem zařízení. Vaše hra může využívat navigaci s GPS, kameru, akcelerometr, nebo dokonce gyro-skop. Psát hry pro iOS může být také zajímavé finančně. Tím, že jsou zařízení s iOS všudypřítomná, mohou hrát vaši hru miliony lidí. A navíc, protože budete distribuovat svou hru v AppStore společnosti Apple, nebudete se muset starat o přípravu vlastní výkladní skříně, abyste mohli distribuovat své výtvory. V lednu 2011 vydala společnost Apple seznam nejlépe se prodávajících aplikací na AppStore:Doodle JumpTap Tap Revenge 3Pocket GodAngry BirdsTap Tap Revenge 2.6Bejeweled 2 + BlitzTraffic RushTap Tap Revenge ClassicAppBox Pro AlarmFlight Control

Poznamenejme, že devět z těchto deseti nejlépe se prodávajících aplikací všech dob pro platformu iOS jsou hry. Z tohoto důvodu bude dobré, když se rozhodnete investovat

Page 20: Vývoj her pro iPhone a iPAD

Kapitola 1 – Hry na iOS18

svůj drahocenný čas takovým způsobem, aby se z vás stal(a) vývojář(ka) her iOS. Než se ovšem začnete starat o to, jak utratit miliony dolarů vyplacených z AppStore, je potřeba, abyste si uvědomili, že nestačí prostě jen napsat nějakou hru pro iOS – budete muset napsat hodně dobrou hru.

Jaké atributy má dobrá hra pro iOS?Pokud máte v úmyslu stát se vývojářem her iOS, první otázka, kterou byste si měli položit, zní takto: "Jaké atributy by měla mít dobrá hra pro iOS – čím se taková hra vyznačuje?" V této sekci se vám pokusím předložit několik věcí, které byste měli mít na zřeteli, až se pustíte do navrhování vlastní hry.

Způsob, jakým se zařízení používáAž začnete formulovat nápady týkající se vaší iOS hry, musíte brát v úvahu několik věcí. První z nich je, jakým způsobem lidé používají různá zařízení iOS. Druhou z nich je způsob, jakým tato zařízení používají. A třetí se vztahuje ke způsobu, jakým hrají hry.

Podívejme se na ale nejprodávanější aplikace pro iOS z  jiného hlediska. Každou z nich můžete zařadit do kategorie tzv. příležitostných her. Na seznamu nejsou žádné sto hodin trvající RPG (Role Playing Game; hry, v nichž hráči zaujímají role fiktivních postav) nebo akční FPS (First Person Shooters; střílečky, v nichž vy sami jste aktérem). Všechny hry ve výše uvedeném seznamu snadno zvládnou i ti, kdo se snaží hrát vůbec poprvé, což jsou často malé děti. A dále – do všech těchto her rychle a snadno vpadnete, stejně jako z nich můžete rychle a snadno vypadnout.

Přemýšlejte o tom, jak lidé hrají hry nebo pracují s jinými aplikacemi na mobilním zařízení. Když vezmete do ruky chytrý telefon, abyste si něco zahráli nebo něco dělali s adresářem, kalendářem nebo textovými zpráva-mi, chcete se co nejrychleji dostat k dané aplikaci a k tomu, co v ní chcete dělat. Mobilní uživatelé nemívají času nazbyt, rozhodně ne na to, aby se prokousávali všelijakými schopnostmi, které obvykle poskytuje plno-hodnotná desktopová aplikace. Totéž platí pro hry. Nejúspěšnější hry pro iOS jsou v současnosti ty, které jsou jednoduché, mají snadno zvládnutelná pravidla a obsahují krátké levely, aby se jimi hráč mohl téměř ihned, během několika málo minut, zabavit. Ačkoliv se to později může změnit, až se z iPadu stane rozšířenější herní platforma, aktuálně doporučujeme, aby vaše hra (pokud má mít předpoklady stát se úspěšnou) byla založena na krátkých levelech a jednoduchých pravidlech.

Používejte jedinečné schopnosti iOSKdyž navrhujete svou hru pro iOS, měli byste vzít v úvahu ještě několik dalších faktorů – například to, jak bude hráč hru ovládat a jak byste mohli využít předností pokročilých funkcí zařízení iOS.

Nejúspěšnější hry na iOS mají velmi jednoduchá ovládací schémata. Na zařízení se systémem iOS nemáte k dispozici žádná fyzická tlačítka. Z toho plyne, že hra, která bude vyžadovat nějaký takový ovladač (jako má třeba Xbox 360) s tucty tlačítek, rozhodně nebude pro iOS to pravé ořechové. Ovládací schéma musí být jednoduché. Ovládání nejúspěšnějších her poskytuje hráči přímou interakci se samotnými prvky dané hry bez použití nějakého zprostředkovatelského ovladače, jako je třeba D-pad nebo joystick. Tento bod je ostat-ně poměrně jasně formulován i v  HIG ( Human Interface Guidelines) a my doporučujeme, abyste si tyto směr-nice pečlivě přečetli. HIG najdete na http://developer.apple.com/library/ios/#DOCUMENTATION/User Experience/Conceptual/MobileHIG/Introduction/Introduction.html.

Page 21: Vývoj her pro iPhone a iPAD

Vývoj her pro iPhone a iPad – programování pro iOS 19

Pro rychlé vtáhnutí hráče do hry můžete využít funkcionalitu přímého dotykového ovládání, kterou zařízení se systémem iOS nabízí. Když například hráči dovolíte, aby hru ovládal tak, že bude v přímé interakci s růz-nými jejími prvky, bude se cítit více vtažen do hry. Zvažte třeba, zda byste se neměli pustit do nějaké deskové hry, jako jsou třeba šachy. Pro hráče je mnohem intuitivnější, když může sám posunovat figurkami, než když jimi musí hýbat zprostředkovaně, s využitím nějakého obrazovkového joysticku a virtuálních tlačítek.

K tomu, aby byla hra ještě poutavější, můžete využít i další schopnosti zařízení s iOS. Všechna zařízení iOS například obsahují akcelerometr, jímž můžete určit orientaci zařízení. Uvažujte o tom, jak byste jím mohli vylepšit ovládání své hry. Představte si třeba hru, kterou hráč ovládá nakláněním zařízení. To, jak se buduje takový typ hry, se dozvíte v této knize později. Takový typ ovládání v podstatě umožňuje zakomponovat do imaginárního světa hry fyzický svět hráče.

Další všeobecně dostupnou schopností je GPS. Popřemýšlejte, jak byste mohli zakomponovat do své hry ze-měpisnou polohu (tj. místo, kde se hráč právě nachází.) Možná byste mohli vybudovat hru, která bude hráči přidělovat nějaké body za to, že dorazí na jistá místa. Nebo můžete určit, že pokud se bude hráč nacházet na nějakém konkrétním místě, může zde získat nějakou speciální zbraň.

Hra má být zábavnáHra musí být zábavná – a tohle musí být vaše nejdůležitější úvaha při jejím navrhování. Pokud není hra zábav-ná, nikdo ji nebude chtít hrát. Mějte na paměti, že hru budete mnohokrát hrát sami už při jejím vývoji. Pokud nebude hra zábavná, nebudete se v průběhu vývojového procesu bavit a to se do hry samotné určitě promítne. Popřemýšlejte o tom, co dělá hry zábavnými a zařazujte do nich takové věci. Uvědomte si ale, že různí lidé považují za zábavné různé věci a vaše představa zábavy nemusí odpovídat tomu, co za zábavné považují jiní lidé. Rozhodně pomůže, když v průběhu vývojového procesu poskytnete hru na vyzkoušení co nejvíce lidem. Tito testeři vám často poskytnou cenné rady či dojmy, které pak budete moci využít a hru vylepšit.

Hra by také měla být snadno pochopitelná. Noví hráči často obtížně pronikají do her, které mají nesnadno pochopitelná pravidla, takže o ni mohou velmi rychle ztratit zájem. A vy přece nechcete, aby hráče něco od-razovalo od vaší hry. Proto navrhněte dostatečně jednoduchá pravidla, aby je hráč okamžitě pochopil. Pokud musíte napsat deset stránek nápovědy, abyste vysvětlili pravidla své hry, asi je pro mobilní zařízení příliš složi-tá. Pokud se přesto rozhodnete vytvořit nějakou složitou hru, počítejte s tím, že byste měli hráčům poskytnout nějaký výukový kurz či názorný návod. Hráči jsou mnohem ochotnější projít si nějakou ukázkovou partii hry než se otravovat s nudným čtením nějakého dokumentu jen proto, aby se naučili její pravidla.

Pak vybalancujte svou hru tak, aby představovala pro hráče nějakou výzvu. Žádného člověka nebaví hrát, když je příliš triviální vyhrát. Nicméně nikoho nebaví ani hra, která je natolik obtížná, že ji prakticky nikdy nevyhraje. Jakožto tvůrce hry byste ji tedy měli vyvážit tak, aby představovala pro hráče jistou výzvu, ale ne takovou, kterou bude jen velmi obtížné zdolat, protože to odrazuje hráče od hraní. Dosáhnete toho třeba tak, že v průběhu vývojového cyklu budete hru často hrát. V logických hrách typu puzzle se ale používá jiná technika, která je založena na tom, že se začíná zvolna, se snadnými levely, přičemž hráč se postupně propra-covává k obtížnějším. Hráč tím získává praxi a cit pro hru, což obojí později využije ve složitějších levelech.

A konečně – odměňujte hráče. Když hráč dosáhne ve hře něčeho, co stojí za povšimnutí, odměňte ho. Třeba nějakou vtipnou animovanou příhodou. S  využitím různých API GameKitu můžete odměňovat i  dosaže-né výsledky ( achievements), kterých hráč ve hře dosáhl. Nezapomeňte na různé žebříčky a  herní statistiky ( Game Center Leader Boards), kterými můžete podněcovat soutěživost mezi jednotlivými hráči vaší hry.

Každopádně, nejdůležitější je, aby vývoj hry bavil především vás. Pokud hra nebaví vás, patrně nebude bavit ani hráče, pro které je určena. Nechte v návrhu hry projevit svůj entuziazmus a vzrušení.

Page 22: Vývoj her pro iPhone a iPAD

Kapitola 1 – Hry na iOS20

Grafika a návrhNepodceňujte význam grafiky ve své hře. Například nádherná ikona může být to jediné, co potenciální ku-pec vidí z vaší hry v AppStore. Plánujete-li svou hru prodávat v AppStore, obětujte čas nebo peníze na vývoj půvabné ikony své hry.

Kromě ikony věnujte pečlivou pozornost grafice a motivu své hry. Pěkná grafika může znamenat rozdíl mezi úspěchem a propadem na AppStore. Na AppStore je k dispozici mnoho her založených na fyzické destrukci: mezi nimi s převahou vede hra Angry Birds ("Naštvaní ptáci"), protože právě grafický návrh ptáků a prasat je to, čím se Angry Birds zřetelně vymezuje oproti svým konkurentům. Ačkoliv samotný herní styl se nijak zvlášť neliší od mnoha jiných her tohoto žánru, zvířátka v Angry Birds opravdu vyčnívají z davu.

Já bohužel nejsem grafik, takže si určitě povšimnete, že grafická kvalita her popisovaných v této knize je pod-průměrná. Nicméně slouží jen pro instruktážní potřeby, takže věřím, že to nebude vadit. Pokud jsou ale vaše grafické dovednosti natolik chabé jako ty moje a vaším záměrem je hru prodávat a vydělat na ní, uděláte jen dobře, když si najmete nějakého profesionála, který si poradí s grafikou hry.

Rozvíjení prvotního nápaduPoté, co se vám v hlavě vynořila myšlenka na novou hru, měli byste ji dále propracovávat. V této fázi byste neměli přemýšlet o tom, jak své nápady vlastně převedete do kódu. Měli byste se soustředit na to, o čem hra bude a co se v ní bude dít – nikoliv na to, jak ji naprogramujete.

Zdokumentování hryPrvním krokem je vytvořit koncept hry, kterou hodláte napsat. Je mi jasné, že vám to připadá jako zbytečná "úředničina", ale specifikace, které v této fázi vytvoříte, vás budou doprovázet celým vývojovým procesem. Tento krok je důležitý zejména tehdy, pokud hru vyvíjíte pro nějakého zákazníka, ne pro sebe, protože v ta-kovém případě může specifikace posloužit jako druh smlouvy mezi vámi a vaším zákazníkem. A na jejím základě bude možné měřit zdar vašeho úsilí a vyhodnocovat, jak daleko jste se při tvorbě hry dostali.

Práce na specifikaci byste měli odstartovat výrokem, který bude definovat celou aplikaci. Měla by to být jediná věta, která bude výstižně popisovat, o čem daná hra vlastně je a na jaké publikum se zaměřuje. Měla by vás doprovázet při všech rozhodnutích, která budete činit v průběhu vývojového procesu. V této sekci kapito-ly vás stručně provedu procesem vytvoření specifikace pro šachy určené začátečníkům. Dobrým výrokem definujícím tuto aplikaci by například mohlo být něco jako toto: "Účelem projektu je implementovat šachy s funkcemi určenými začátečníkům pro vysvětlení základních pravidel této hry."

Jakmile máte sestavenou definici aplikace, můžete začít vymýšlet funkce, které hodláte ve hře implementovat. K  tomu můžete přistoupit různými způsoby – můžete vytvořit oficiální dokument nebo prostě jen sepsat jejich seznam. Pro šachy určené začátečníkům by seznam funkcí mohl vypadat takto:Implementovat správná šachová pravidla.Poskytnout hráčům možnost vracet tahy.Dát hráči možnost zeptat se počítače, jaké další tahy by doporučil.Zobrazit hráči platné tahy pro jakoukoli vybranou figurku.Vybudovat počítačového protivníka, který se bude umět adaptovat na herní úroveň hráče.

Page 23: Vývoj her pro iPhone a iPAD

271

KAPITOLA 8 Animování grafiky

Stručný přehled kapitoly:Animování posloupnosti obrázků s UIImageView.Základy práce s Core Animation.Práce s bloky Objective-C.Animování zobrazení UIView.Používání vrstvy Core Animation.Ukázková hra předvádějící animování vlastností a přechodů.

Jedním z nejdůležitějších aspektů prakticky jakékoliv hry je animace. V knize jste se už dříve dozvěděli, jak se pomocí třídy CADisplayLink animují hry na základě obnovo-vací frekvence displeje (display refresh rate). Pomocí této třídy jste aktualizovali pozici objektů ve hře na základě doby, která uplynula od poslední aktualizace displeje. V této kapitole prozkoumáte dvě další animační techniky.

Nejprve se společně podíváme na animování jednotlivých spritů pomocí třídy UI-ImageView. Možná si ještě vzpomenete, že jste pomocí zobrazení UIImageView zob-razovali míček a pálku ve hře na rozbíjení cihel, Blocker. S třídou UIImageView mů-žete ale animovat nejenom statické obrázky, ale také sérii obrázků. Jednoduše jí dodáte pole obrázků, nakonfigurujete dobu trvání animace a řeknete jí, aby začala animovat. Toto zobrazení pak zobrazuje jednotlivé obrázky z pole tak, aby se během specifikova-né doby trvání animace postupně zobrazily všechny obrázky.

Poté, co skončíte s  UIImageView, soustředíte svou pozornost na práci s Core Anima-tion. Pomocí tohoto API můžete budovat velmi složité animace. S  Core Animation můžete animovat tak, že měníte mnoho vlastností zobrazení a/nebo animujete pře-chod mezi zobrazeními.

Animace obrázků s UIImageViewJak si snad ještě pamatujete z kapitoly 6, pomocí tříd UIImage a UIImageView může-te ve svých hrách zobrazovat obrázky nebo sprity. UIImageView můžete ale používat i jinak. Můžete třeba do UIImageView načíst posloupnost obrázků a díky tomu, že je

Page 24: Vývoj her pro iPhone a iPAD

Kapitola 8 – Animování grafi ky272

zobrazujete postupně, vytvoříte animaci. Pro potřeby úvodního příkladu této kapitoly jsem vytvořil 10 obráz-ků primitivního ciferníku s jedinou ručičkou, máte je všechny na obrázku 8-1.

Obrázek 8-1. Jednotlivé obrázky ciferníku pro animaci.

První obrázek jsem vytvořil s ručičkou ukazující na 12 hodin. Rozhodl jsem se, že budu animovat jen deset snímků, abych měl počet souborů co nejmenší. Pak jsem vždy ručičku natočil o 36 stupňů (360 stupňů děleno deseti snímky) a obrázek uložil. Pokračoval jsem, dokud ručička neoběhla celý ciferník, takže jsem nakonec měl uloženo deset obrázků.

Chcete-li k animaci použít UIImageView, je potřeba načíst obrázky do pole a nastavit vlastnost animation-Images obrázkového zobrazení tak, aby ukazovala na toto pole. Dobu trvání animace v sekundách nastavíte vlastností animationDuration. Vlastností animationRepeatCount můžete také specifikovat, kolikrát se má animace opakovat. Výchozí hodnota vlastnosti animationRepeatCount je nula, což vyjadřuje, že ani-mace bude pokračovat tak dlouho, dokud ji nezastavíte.

Jakmile máte zobrazení UIImageView nakonfigurované s obrázky, které má zobrazovat, odstartujete animaci tím, že mu odešlete zprávu startAnimating. Animaci můžete zastavit tak, že mu odešlete zprávu stopA-nimating. A konečně, vlastností isAnimating můžete kontrolovat, zda v zobrazení běží nějaká animace.

VYZKOUŠEJTE Animování obrázků. Soubor kódu ImageAnimation si můžete stáhnout na zonerpress.cz.

V tomto příkladu budete pomocí třídy UIImageView animovat rotaci ručičky hodin po ciferníku. 1. Spusťte Xcode a vyberte File -> New -> New Project. 2. Objeví se dobře známý dialog s šablonami pro různé typy aplikací, které můžete vytvářet pro iPhone

a Mac OS X. Vyberte v dialogu Single View Application a klikněte na Next. 3. Do textového pole Product Name napište název svého projektu, ImageAnimation. Odškrtněte políčka

"Use Storyboard" a "Include Unit Tests". Zkontrolujte, zda je zaškrtnuté políčko "Use Automatic Refe-rence Counting". Z rozevíracího seznamu Device Family vyberte "iPhone". Klikněte na Next.

4. Vyberte umístění pro svůj projekt a klikněte na tlačítko Create. Xcode vytvoří projekt a předloží vám okno projektu.

5. Vytvořte novou skupinu souborů, kde budete mít obrázky, které chcete animovat. Z menu vyberte File -> New -> New Group. Pojmenujte novou skupinu Images.

6. Z menu vyberte File -> Add files to ImageAnimation a přidejte soubory obrázků do složky Images. Obrázky pro tento projekt si můžete stáhnout z webu zonerpress.cz.

7. Otevřete implementační soubor ViewController.m. Do metody viewDidLoad přidejte pod řádek, který volá implementaci viewDidLoad ze supertřídy ([super viewDidLoad];), tento kód:

// Připraví obrázkové zobrazení

Page 25: Vývoj her pro iPhone a iPAD

Vývoj her pro iPhone a iPad – programování pro iOS 273

UIImageView* animatedImages = [[UIImageView alloc]

initWithFrame:CGRectMake(10, 10, 100, 100)];

[self.view addSubview:animatedImages];

// Načte obrázky do pole

NSMutableArray *imageArray = [[NSMutableArray alloc] initWithCapacity:10];

NSString* fileName;

// Dynamicky buduje názvy souborů

for (int i=1; i<=10; i++)

{

fileName = [NSString stringWithFormat: @"Clock%i.png",i];

[imageArray addObject:[UIImage imageNamed:fileName]];

}

// Nakonfiguruje animaci

animatedImages.animationImages = imageArray;

animatedImages.animationDuration = 1;

// Odstartuje animaci

[animatedImages startAnimating];

8. Sestavte a spusťte program. Měli byste uvidět v levém horním rohu obrazovky ciferník hodin s otáče-jící se ručičkou, jako na obrázku 8-2.

Obrázek 8-2. Běžící aplikace ImageAnimation.

Page 26: Vývoj her pro iPhone a iPAD

Kapitola 8 – Animování grafi ky274

Jak to fungujeNejprve jste vytvořili instanci třídy UIImageView a nastavili její pozici. Funkcí CGRectMake jste vytvořili obdélník a předali ho jako rám obrázku:

UIImageView* animatedImages = [[UIImageView alloc]

initWithFrame:CGRectMake(10, 10,100, 100)];

Obdélník, který jste vytvořili, měl levý horní roh (10,10) a výšku a šířku 100 pixelů. Pak jste zobrazení UI-ImageView, které jste právě vytvořili, přidali do zobrazení kontroléru zobrazení jako podzobrazení:

[self.view addSubview:animatedImages];

Pak jste se pustili do konfigurace svého podzobrazení pro potřeby animace. Prvním krokem bylo načíst do pole obrázky určené pro animaci. Protože jste načítali obrázky do pole za pochodu, bylo třeba použít NS-MutableArray:

NSMutableArray *imageArray = [[NSMutableArray alloc] initWithCapacity:10];

Vzpomeňte si, že NSArray je nezměnitelné, takže jakmile byste takové pole vytvořili, nemohli byste je mo-difikovat. Můžete však bez omezení přidávat prvky do NSMutableArray nebo z něho prvky odstraňovat.

Pak jste deklarovali NSString, v němž budete mít název souboru obrázku, který se chystáte načíst do pole:

NSString* fileName;

Já jsem soubory účelově pojmenoval pomocí pořadových čísel, aby se daly snadno načítat za běhu v cyklu. Následující blok kódu cykluje přes obrázky, dynamicky sestaví název souboru obrázku, vytvoří objekt UI-Image a přidá ho do pole. Nejprve jste nastartovali cyklus:

for (int i=1; i<=10; i++) {

Pak jste sestavili název souboru metodou stringWithFormat. Zde sestavujete název podle vzoru Clock%i.png, kde se do řetězce místo %i vloží hodnota čítače:

fileName = [NSString stringWithFormat: @"Clock%i.png",i];

Pak jste zavolali metodu addObject pole NSMutableArray, abyste obrázek přidali do pole. Obrázek jste vytvořili pomocí názvu souboru, který jste předtím vygenerovali:

[imageArray addObject:[UIImage imageNamed:fileName]];

Jakmile jste načetli do pole všechny obrázky, nakonfigurovali jste parametry animace. Nejprve jste nastavili, které pole se bude v animaci používat:

animatedImages.animationImages = imageArray;

Pak jste animaci nakonfigurovali tak, aby se všechny obrázky ze zadaného pole prošly za jednu sekundu:

animatedImages.animationDuration = 1;

Pohrajte si s dobou trvání animace, abyste viděli, jak bude animace vypadat, když poběží pomaleji nebo rych-leji. Nakonec jste animaci odstartovali:

[animatedImages startAnimating];

Page 27: Vývoj her pro iPhone a iPAD

Vývoj her pro iPhone a iPad – programování pro iOS 275

Stručný úvod do Core Animation Core Animation, což je část frameworku Quartz Core, je alfou a omegou pro animace, které vidíte v uživatel-ském rozhraní iPhone. Příkladem takové animace je třeba situace, kdy jste v nějaké aplikaci a stisknete tlačítko Home. Aplikace mizí v dálavách a na obrazovku se vrací vaše domovská obrazovka.

Pomocí Core Animation se snadno vytvářejí animace tím, že se mění různé vlastnosti animovatelných objek-tů. Patří mezi ně UIView a  CALayer.

Core Animation deleguje práce nezbytné pro vykonávání animací na sekundární vlákno. To znamená, že hlavní vlákno programu může nerušeně pokračovat v běhu a vstřícně reagovat na akce uživatele i v době, kdy běží nějaká animace. Modifikujete-li nějakou animovatelnou vlastnost v době, kdy už běží nějaká animace, Core Animation nastartuje tuto animaci z aktuálního bodu v běžící animaci.

Pomocí Core Animation se snadno vytvářejí i  velmi složité animace. Ve zbývající části této kapitoly pro-zkoumáte, jak se pracuje s Core Animation. Nejprve se naučíte používat Core Animation nepřímo, budete animovat některé vlastnosti UIView. Pak vybudujete variantu hry Pexeso, kde využijete Core Animation se zobrazeními UIView. Pak proniknete ještě hlouběji a naučíte se pracovat s vrstvami Core Animation, abyste dokázali vytvářet takové animace, jakých nelze docílit s animačními metodami UIView.

Stručný úvod k anonymním blokům kóduNež si ale začnete prohlížet kód dalších animací, musíte porozumět jedné (doposud ne standardizované) schopnosti jazyka C, díky níž je možné v kódu definovat tzv. inline funkci a předávat ji jako proměnnou. V této knize se této schopnosti říká bloky (blocks), v jiných jazycích se používá termín uzávěry (closures), lambda funkce (lambda functions) nebo anonymní funkce (anonymous functions). Bloky jsou v Core Ani-mation velmi důležité, protože jimi říkáte animačnímu jádru, co má dělat během animace.

Blokem se v tomto kontextu rozumí anonymní neboli nepojmenovaný blok kódu. V definici bloku můžete specifikovat návratový typ a argumenty jako u libovolné jiné funkce. Bloky běží v tom oboru, v jakém jste je definovali, takže mají přístup ke všem vašim lokálním proměnným.

Blokové proměnné a bloky samotné se definují operátorem stříška (^). Kód bloku je obsažen uvnitř složených závorek ({}) jako libovolná jiná funkce C či Objective-C. Ve většině případů, včetně příkladů v této kapitole, není nutné explicitně vytvářet blokovou proměnnou. Bloky prostě píšete přímo ve svém kódu (neboli inline), jak to ostatně sami uvidíte v nadcházejícím příkladu.

Ohledně bloků si momentálně zapamatujte především to, že to jsou anonymní fragmenty (anonymous sni-ppets) kódu, které lze předávat jako proměnné.

Animování vlastností a přechodů UIView Z diskuse, kterou jsme v kapitole 6 vedli o kreslení, si možná ještě pamatujete, že mezi Core Graphics a UIKit je jistý specifický vztah. UIKit je nadstavbou Core Graphics, poskytuje jednoduché API pro většinu běž-ných operací. Například pro kreslení cest jste používali třídu UIBezierPath UIKitu a nekreslili jste je přímo s Core Graphics. Obdobný vztah je také mezi Core Animation a UIKit.

Page 28: Vývoj her pro iPhone a iPAD

Kapitola 8 – Animování grafi ky276

Jsou jisté druhy animací, které se v programování pro iOS vyskytují velmi běžně. Abyste nemuseli pronikat hluboko do Core Animation, když chcete realizovat takové animace, společnost Apple se vám snaží usnadnit život poskytnutím přístupu k některým schopnostem Core Animation v třídách UIKit. Konkrétně, třída UI-View má podporu pro dva typy animací, takže pokud s ní vystačíte, nemusíte vědět o Core Animation vůbec nic. S UIView můžete realizovat dva typy animací: animování vlastností a přechodů.

Animování vlastnostíCore Animation vám umožňuje animovat změny následujících vlastností příslušného zobrazení:frame

bounds

center

transform

alpha

backgroundColor

contentStretch

K animování těchto vlastností poskytuje UIView tyto blokové animační metody:+animateWithDuration:delay:options:animations:completion:

+animateWithDuration:animations:completion:

+animateWithDuration:animations:

Všechno to jsou statické metody UIView, takže nepotřebujete žádnou instanci zobrazení, abyste mohli spou-štět animaci. Každá z metod nabízí různou úroveň kontroly nad animací.

Nejjednodušší metoda, +animateWithDuration:animations:, umožňuje specifikovat dobu trvání ani-mace a blok, který napíšete pro vykonání samotné animace.

Metoda +animateWithDuration:animations:completion: staví na předchozí metodě v tom, že umož-ňuje specifikovat blok, který se má vykonat, až animace skončí. Pomocí ukončovacího bloku můžete řetězit několik animací za sebou.

Nejsložitější je třetí metoda, +animateWithDuration:delay:options:animations:completion:, kte-rá nabízí dodatečné parametry umožňující specifikovat prodlevu před spuštěním animace a dodatečné volby pro konfiguraci animace.

VYZKOUŠEJTE Budování hry Pexeso. Soubor kódu Concentration si můžete stáhnout na zonerpress.cz.

V tomto příkladu budete implementovat klasickou hru Concentration (varianta Pexesa pro jednoho hráče). Na hrací plochu se rozdá sada kartiček lícem dolů. Hráč otočí libovolnou kartičku lícem nahoru. Pak otočí ještě další kartičku lícem nahoru a doufá, že najde právě tu, která tvoří pár s první kartičkou. Pokud se mu to povedlo, odstraní se obě kartičky z hrací plochy, Pokud se netrefil, otočí se obě kartičky zase lícem dolů. Cílem hry je v co nejmenším počtu tahů odstranit z hrací plochy všechny kartičky.

Protože tuto hru tvoří velmi mnoho kartiček, vybudujete ji jako aplikaci určenou pro iPad. Snímek obrazovky rozehrané hry vidíte na obrázku 8-3.

Page 29: Vývoj her pro iPhone a iPAD

Vývoj her pro iPhone a iPad – programování pro iOS 277

Obrázek 8-3. Rozehrané Pexeso.

Situace na obrázku 8-3 ukazuje, že hráč už úspěšně odstranil čtyři páry kartiček, pak otočil lícem nahoru kartičku s číslem 12 a nyní by měl otočit další kartu s číslem 12, která tvoří pár s první dvanáctkou. Cílem hry je posilovat soustředění, protože hráč by se měl snažit zapamatovat pokud možno všechny kartičky, které už někdy otočil lícem nahoru, ale zase je musel otočit zpět, protože netrefil pár.

Na kartičkách může být cokoliv, slova, čísla, nebo dokonce obrázky. Protože postrádám malířské vlohy, sestro-jil jsem prostou sadu kartiček s čísly od 1 do 16. Grafické ztvárnění jedné z nich vidíte na obrázku 8-4. Abych si ještě více usnadnil grafické práce, vytvořil jsem čtyři instance každé kartičky, takže jsem získal celkem 64 kartiček. Hráč uspěje, když se mu podaří otočit libovolné dvě kartičky, které mají stejné číslo. Takový pár se pak odstraní z hrací plochy.

Obrázek 8-4. Rub a líc jedné kartičky Pexesa.

Page 30: Vývoj her pro iPhone a iPAD

Kapitola 8 – Animování grafi ky278

Všechny animace v tomto projektu zařídíte pomocí UIView. V této sekci zahájíte projekt, vybudujete zobra-zení CardImageView a pomocí animování vlastnosti rozdáte kartičky na hrací plochu.

1. Začněte tím, že nastartujete Xcode a vyberete File -> New -> New Project. 2. Objeví se dobře známý dialog s šablonami pro různé typy aplikací, které můžete vytvářet pro iPhone

a Mac OS X. Vyberte v dialogu Single View Application a klikněte na Next. 3. Do textového pole Product Name napište název svého projektu, Concentration. Odškrtněte políčka

"Use Storyboard" a "Include Unit Tests". Zkontrolujte, zda je zaškrtnuté políčko "Use Automatic Refe-rence Counting". Z rozevíracího seznamu Device Family vyberte "iPad". Klikněte na Next.

4. Vyberte umístění pro svůj projekt a klikněte na tlačítko Create. Xcode vytvoří projekt a předloží vám okno projektu.

5. Nyní potřebujete importovat do projektu obrázky kartiček. Můžete si je stáhnout ze stránek vydavatel-ství zonerpress.cz. Vytvořte novou skupinu souborů, kde budete mít obrázky, s nimiž budete pracovat. Z menu vyberte File -> New -> New Group. Pojmenujte novou skupinu Images.

6. Z menu vyberte File -> Add files to Concentration a přidejte soubory obrázků (Card Front_#.png, kde # zastupuje číslo od 1 do 16 a Card_Back.png) do složky Images. Zaškrtněte políčko "Copy items into destination group’s folder (if needed)". Klikněte na "Add", abyste obrázky přidali do projektu.Přípravné práce jsou hotové, můžete začít budovat třídu CardImageView. Protože bude hra opravdu velmi jednoduchá, rozhodl jsem se, že ji nebudu implementovat s typickou architekturou MVC (mo-del-zobrazení-kontrolér). Model je uložen v zobrazeních (kartičky) a v kontroléru zobrazení. Proto jsem se rozhodl uložit některá data přímo na kartičkách – konkrétně hodnotu kartiček a to, zdali je kartička otočená lícem dolů, nebo nahoru. Kartička kromě toho bude mít metody pro inicializaci kartičky obdélníkovým rámem a hodnotou (initWithFrame:value:) a pro otočení kartičky (flip-Card). Protože kartičky nejsou nic jiného než obrázky, rozhodl jsem se dědit ze třídy UIImageView.

7. Vyberte z menu File -> New -> New File. V dialogu pro volbu šablony vyberte vlevo pod iOS šablonu Cocoa Touch. V pravém podokně vyberte Objective-C class a stiskněte Next. Do pole se seznamem "Subclass of " napište UIImageView. Pojmenujte třídu CardImageView a stiskněte Next. V dalším dialogu klikněte na Create. V navigátoru projektu uvidíte pod adresářem Concentration dva nové soubory s názvy CardImageView.h and CardImageView.m.

8. Do bloku @interface přidejte deklarace instančních proměnných faceDown a value:

@interface CardImageView : UIImageView

{

BOOL faceDown;

int value;

}

9. Vně bloku @interface napište tyto deklarace metody a vlastnosti:

- (id)initWithFrame:(CGRect)aRect value:(int) inValue;

-(void) flipCard;

@property BOOL faceDown;

@property int value;

10. Přepněte se do implementačního souboru CardImageView. Pod direktivu @implementation přidej-te direktivu @synthesize, abyste syntetizovali vlastnosti:

Page 31: Vývoj her pro iPhone a iPAD

Vývoj her pro iPhone a iPad – programování pro iOS 279

@synthesize faceDown,value;

11. Teď implementujte metodu initWithFrame:value:.

- (id)initWithFrame:(CGRect)aRect value:(int) inValue

{

self = [super initWithFrame:aRect];

if (self)

{

self.value = inValue;

self.faceDown = YES;

self.image = [UIImage imageNamed:@"Card_Back.png"];

}

return self;

}

12. Implementujte metodu flipCard:

-(void) flipCard

{

if (self.faceDown)

{

NSString* frontFileName =

[NSString stringWithFormat:@"Card Front_%i.png",self.value];

self.image = [UIImage imageNamed:frontFileName];

self.faceDown = NO;

}

else

{

self.image = [UIImage imageNamed:@"Card_Back.png"];

self.faceDown = YES;

}

}

13. Teď zapracujte na kontroléru zobrazení, ViewController. Vyberte hlavičkový soubor ViewContro-ller.h. Pod příkaz #import, který importuje UIKit, přidejte následující direktivu #import, abyste importovali hlavičkový soubor CardImageView.h:

#import "CardImageView.h"

14. Vně bloku @interface napište následující deklarace metod:

-(void) createCards;

-(void) addCardsToView:(NSMutableArray*) cards;

15. Nyní můžete přejít k implementačnímu souboru ViewController.m a implementovat do něho roz-dání kartiček. Do metody viewDidLoad přidejte volání metody createCards:

- (void)viewDidLoad

Page 32: Vývoj her pro iPhone a iPAD

Kapitola 8 – Animování grafi ky280

{

[super viewDidLoad];

[self createCards];

}

16. Přidejte metodu createCards:

-(void) createCards

{

// 16 * 4 kartiček

// Vytvoří kartičky

NSMutableArray *cards = [[NSMutableArray alloc] initWithCapacity:64];

for (int i=1; i<=16; i++)

{

for (int j=1; j<=4; j++)

{

[cards addObject:[NSNumber numberWithInt:i]];

}

}

// Zamíchá kartičky

srandom( time( NULL ) );

int swapA, swapB;

for (int i=0; i<100000; i++)

{

swapA = (random() % 64);

swapB = (random() % 64);

NSNumber *tempNumber = [cards objectAtIndex:swapA];

[cards replaceObjectAtIndex:swapA

withObject:[cards objectAtIndex:swapB]];

[cards replaceObjectAtIndex:swapB

withObject:tempNumber];

}

[self addCardsToView:cards];

}

17. Přidejte metodu addCardsToView:.

-(void) addCardsToView:(NSMutableArray*) cards

Page 33: Vývoj her pro iPhone a iPAD

Vývoj her pro iPhone a iPad – programování pro iOS 281

{

CardImageView* card;

CGRect cardFrame;

CGRect cardOrigin = CGRectMake(0,0, 40, 60);

cardFrame.size = CGSizeMake(40, 60);

CGPoint origin;

int cardIndex = 0;

NSTimeInterval timeDelay = 0.0;

for (int i=0; i<8; i++)

{

for (int j=0; j<8; j++)

{

origin.y = i*70 + 100;

origin.x = j * 50 + 100;

cardFrame.origin = origin;

// Vytvoří kartičku v počátku

card = [[CardImageView alloc] initWithFrame:cardOrigin

value:[[cards objectAtIndex:cardIndex] intValue]];

[self.view addSubview:card];

// Animuje přesuny kartiček do jejich cílových pozic

[UIView animateWithDuration:0.5

delay:timeDelay

options:UIViewAnimationOptionCurveLinear

animations: ^

{

card.frame = cardFrame;

}

completion:NULL];

timeDelay += 0.1;

cardIndex++;

}

}

}

18. Sestavte a spusťte projekt. Měli byte vidět, jak program rozdává na hrací plochu kartičky. Prostřed-nictvím metod UIView jste s pomocí Core Animation animovali rozdání kartiček nacházejících se v balíčku v levém horním rohu hrací plochy do jejich finálních pozic.

Page 34: Vývoj her pro iPhone a iPAD

www.zoner.cz

ZONER software, a.s. významný producent softwaru v oblasti

digitální fotografi e, počítačové grafi ky a multimédií,

poskytovatel internetových služeb, souvisejících s prezentací

na internetu a e-komercí, a nakladatelství odborné literatury.

ZONER software, a.s., Nové sady 18, 602 00 Brno

Zoner Presstel.: 532 190 883e-mail: [email protected]

Začněte ještě dnes psát hry pro platformu iOS.

Chcete se pustit do vytváření her pro iPhone a iPAD, ale jste nováčkem v oblasti pro-

gramování pro iOS? Tato kniha vám přístupnou a srozumitelnou formou poradí, jak

začít, protože zahrnuje popis všech nezbytných technologií, které potřebujete znát

k tomu, abyste mohli vyvíjet zajímavé hry pro iOS. Kniha je rozdělena do dvou hlav-

ních částí – první část popisuje všechny nezbytné nástroje, jako je programovací pro-

středí Xcode, programovací jazyk C, programovací jazyk Objective-C, a samozřejmě

nechybí ani popis frameworku Cocoa Foundation. Jakmile zvládnete tyto základy,

budete se moci pustit do prozkoumávání knihoven, které jsou nezbytné pro zahrnutí

grafiky, animací a zvuků do her. Rovněž se dozvíte, jak reagovat na akce uživatelů a jak

budovat síťové hry.

Protože autor knihy Patrick Alessi zastává názor, že studium toho, jak vytvářet hry pro

iOS, by mělo být minimálně stejně zábavné jako vytváření her samotných, v  téměř

každé kapitole této knihy naleznete praktickou ukázku, která vás provede procesem

vytvoření jednoduché hry. Tyto ukázky jsou vedeny stylem krok za krokem a je v nich

vysvětlován každý důležitý kus kódu, takže budete vždy přesně vědět, co právě děláte

a proč to děláte.

Přehled kapitol: Hry na iOS

Programovací prostředí Xcode

Programovací jazyk C57

Programovací jazyk Objective-C

Framework Cocoa Foundation

Kreslení s UIKit a Core Graphics

Reakce na akce uživatele

Animování grafi ky

API pro audio: tvorba zvuků v iOS

Budování síťové hry s GameKitem

Zdrojové kódy ke stažení:http://zonerpress.cz/download/ios-vyvoj-her.zip

E N C Y K L O P E D I E Z O N E R P R E S S

Pod tímto logem vycházejí publikace určené pro každého, kdo se zajímá o  tvorbu

webových stránek. Od ryze praktických příruček a průvodců až po komplexní publi-

kace o všem, co potřebuje webdesignér při každodenní práci. Na vydavatelský plán

a výhody, které můžete získat, se informujte na adrese vydavatelství.

ISBN 978-80-7413-199-8KATALOGOVÉ ČÍSLO: ZR1202

9 7 8 8 0 7 4   1 3 1 9 9 8

Patrick Alessi

Vývoj her pro iPhone a iPad

Programování pro iOS

© iS

tock

phoh

o (#

1549

8677

)


Recommended