Date post: | 28-Mar-2016 |
Category: |
Documents |
Upload: | zoner-software-as |
View: | 220 times |
Download: | 0 times |
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
Patrick Alessi
Vývoj her pro iPhone a iPad
Programování pro iOS
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
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ž.
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.
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
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
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
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
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
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
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
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
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.
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.
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
16
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
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.
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í.
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.
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
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í
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.
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];
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.
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.
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.
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:
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
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
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.
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
)