Programujeme hry v HTML5

Transcription

Programujeme hry v HTML5
Makzan
Programujeme hry v HTML5
Computer Press
Brno
2012
K2023.indd 1
14.5.2012 10:25:25
Programujeme hry v HTML5
Makzan
Překlad: Jakub Zemánek
Obálka: Martin Sodomka
Odpovědný redaktor: Martin Herodek
Technický redaktor: Jiří Matoušek
Copyright © Packt Publishing 2011.
First published in the English language under the title ’HTML5 Games Development by Example:
Beginner´s Guide’
Objednávky knih:
http://knihy.cpress.cz
www.albatrosmedia.cz
[email protected]
bezplatná linka 800 555 513
ISBN 978-80-251-3731-4
Vydalo nakladatelství Computer Press v Brně roku 2012 ve společnosti Albatros Media a. s. se sídlem
Na Pankráci 30, Praha 4. Číslo publikace 16 194.
© Albatros Media a. s. Všechna práva vyhrazena. Žádná část této publikace nesmí být kopírována
a rozmnožována za účelem rozšiřování v jakékoli formě či jakýmkoli způsobem bez písemného
souhlasu vydavatele.
1. vydání
K2023.indd 2
14.5.2012 10:26:05
Obsah
ÚVOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
Co v této knize najdete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Co budete v této knize potřebovat . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Pro koho je tato kniha určena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Použité konvence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Zpětná vazba od čtenářů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Zdrojové kódy ke knize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
KAPITOLA 1
SEZNÁMENÍ S HRAMI V HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . .19
Nové funkce HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Plátno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Geolokace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
WebGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
Lokální úložiště . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
Offline aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
Nové funkce CSS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Přechody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
K2023.indd 3
14.5.2012 10:26:05
Obsah
Transformace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
Animace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
Nové funkce HTML5 a CSS3 detailněji . . . . . . . . . . . . . . . . . . . . . . . 27
Výhody her v HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Žádné zásuvné moduly třetích stran. . . . . . . . . . . . . . . . . . . . . . . . .27
Podpora iOS zařízení bez dodatečných zásuvných modulů. . . . . . .28
Překročení hranice klasických her v prohlížeči . . . . . . . . . . . . . . . . .28
Vývoj her v HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
Jaké hry v HTML5 hrají ostatní . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Pexeso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
Sinuous. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
Nové pojetí hry Asteroids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Quake 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
RumpeTroll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
Scrabb.ly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
Aves Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
Další hry v HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Co v této knize vytvoříme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Shrnutí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
KAPITOLA 2
ZAČÍNÁME S VÝVOJEM HER A DOM . . . . . . . . . . . . . . . . . . . . . . .37
Příprava vývojového prostředí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Příprava dokumentů HTML pro hru . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Doctype pro HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
Záhlaví a zápatí. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Kam umístit kód v JavaScriptu. . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Provedení kódu po načtení stránky . . . . . . . . . . . . . . . . . . . . . . . . .41
Vytvoření elementů pro hru Ping Pong . . . . . . . . . . . . . . . . . . . . . . . 41
Seznámení s jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
Seznámení se selektory jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
Seznámení s metodou css knihovny jQuery. . . . . . . . . . . . . . . . . . .45
Výhody jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
K2023.indd 4
14.5.2012 10:26:05
Obsah
Práce s elementy hry pomocí jQuery . . . . . . . . . . . . . . . . . . . . . . . .46
Absolutní pozicování a jeho specifika. . . . . . . . . . . . . . . . . . . . . . . .47
Načtení vstupu z klávesnice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Klávesnice a kódy kláves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
Lépe čitelné konstanty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
Převod řetězců na čísla pomocí funkce parseInt . . . . . . . . . . . . . . .52
Provádění kódu v JavaScriptu z konzole . . . . . . . . . . . . . . . . . . . . .53
Sledování konzole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
Podpora vícenásobného vstupu z klávesnice . . . . . . . . . . . . . . . . . . 54
Lepší deklarace globálních proměnných . . . . . . . . . . . . . . . . . . . . .56
Vytvoření časovače pomocí funkce setInterval . . . . . . . . . . . . . . . .57
Herní smyčka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
Pohyb elementu s použitím časovače . . . . . . . . . . . . . . . . . . . . . . . . 58
Základy detekce kolizí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Dynamické zobrazení textu v HTML . . . . . . . . . . . . . . . . . . . . . . . . . 64
Shrnutí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
KAPITOLA 3
PEXESO A CSS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
Pohyb elementů s použitím přechodů CSS3 . . . . . . . . . . . . . . . . . . . 67
2D transformační funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
3D transformační funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
Úprava stylů s použitím přechodů CSS3 . . . . . . . . . . . . . . . . . . . . . . 72
Efekt otočení karty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Přepínání třídy pomocí metody
toggleClass knihovny jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
Nastavení viditelnosti překrývajících
se prvků pomocí vlastnosti z-index . . . . . . . . . . . . . . . . . . . . . . . .76
Vlastnost perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
Vlastnost backface-visibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
Vytváříme pexeso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Stažení obrázků hracích karet . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
Příprava prostředí hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
Klonování elementů pomocí jQuery . . . . . . . . . . . . . . . . . . . . . . . . .86
K2023.indd 5
14.5.2012 10:26:05
Obsah
Výběr prvního potomka elementu pomocí jQuery . . . . . . . . . . . . . .86
Vertikální zarovnání elementu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
Použití sprite sheetu jako obrázku na pozadí . . . . . . . . . . . . . . . . . .87
Přidání logiky hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Provedení kódu po dokončení přechodu . . . . . . . . . . . . . . . . . . . . .92
Odložené provedení kódu při obracení karet . . . . . . . . . . . . . . . . . .92
Náhodné uspořádání prvků pole . . . . . . . . . . . . . . . . . . . . . . . . . . .92
Uložení dat do elementu pomocí vlastního datového atributu . . . . .93
Přístup k vlastním datovým atributům pomocí jQuery . . . . . . . . . . .94
Další karetní hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96
Přidání písem do hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Další služby pro webová písma . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
Shrnutí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
KAPITOLA 4
HRA UNTANGLE A PLÁTNO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
Seznámení s elementem plátna . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Kresba kruhů na plátno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Alternativní obsah pro případ, že prohlížeč plátno nepodporuje . .104
Kresba kruhů a čar s použitím metody arc . . . . . . . . . . . . . . . . . . .105
Převod stupňů na radiány. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
Kresba cest na plátně. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
Vytvoření cesty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
Uzavření cesty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110
Vložení kódu pro kresbu kruhů do funkce . . . . . . . . . . . . . . . . . . .111
Generování náhodných čísel v JavaScriptu . . . . . . . . . . . . . . . . . .112
Uložení pozice kruhu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
Základní definice tříd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
Kresba čar na plátno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Seznámení s aplikačním rozhraním pro kresbu čar . . . . . . . . . . . .117
Interakce s nakreslenými objekty pomocí myši . . . . . . . . . . . . . . . . 118
Určení polohy myši v rámci plátna . . . . . . . . . . . . . . . . . . . . . . . . .122
Obsluha událostí myši týkajících se kruhů . . . . . . . . . . . . . . . . . . .122
Herní smyčka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124
Vymazání obsahu plátna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124
K2023.indd 6
14.5.2012 10:26:06
Obsah
Detekce průsečíků čar na plátně . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Určení toho, zda se dvě přímky protínají . . . . . . . . . . . . . . . . . . . .128
Vytvoření hry Untangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Definice úrovní hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134
Určení postupu mezi úrovněmi . . . . . . . . . . . . . . . . . . . . . . . . . . . .135
Zobrazení aktuální úrovně a ukazatel postupu . . . . . . . . . . . . . . . .135
Shrnutí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
KAPITOLA 5
VYLEPŠENÁ HRA UNTANGLE A PLÁTNO. . . . . . . . . . . . . . . . . . .137
Výplň tvarů gradientní barvou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Nastavení přechodových bodů gradientu. . . . . . . . . . . . . . . . . . . .139
Radiální gradient. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
Zobrazení textu na plátně . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Použití vlastního písma na plátně . . . . . . . . . . . . . . . . . . . . . . . . . .146
Zobrazení obrázků na plátně . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Použití metody drawImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150
Dekorace hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152
Animace sprite sheetu na plátně . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Vytvoření více vrstev na plátně . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Kombinace kaskádových stylů a kreslení na plátno . . . . . . . . . . . .165
Shrnutí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
KAPITOLA 6
HUDBA, ZVUKOVÉ EFEKTY A ELEMENT AUDIO. . . . . . . . . . . . .167
Přidání zvukového efektu ke spouštěcímu tlačítku . . . . . . . . . . . . . 168
Vytvoření elementu audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171
Přehrání zvuku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172
Pozastavení přehrávání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173
Nastavení hlasitosti zvuku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173
Událost hover knihovny jQuery. . . . . . . . . . . . . . . . . . . . . . . . . . . .173
Převedení audia do formátu OGG . . . . . . . . . . . . . . . . . . . . . . . . .174
Podpora ostatních webových prohlížečů . . . . . . . . . . . . . . . . . . . .175
K2023.indd 7
14.5.2012 10:26:06
Obsah
Vytvoření hudební hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Scény ve hrách HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179
Vizualizace přehrávané hudby . . . . . . . . . . . . . . . . . . . . . . . . . . . .179
Výběr správné skladby pro hudební hru . . . . . . . . . . . . . . . . . . . . .185
Uložení a načtení údajů o skladbě . . . . . . . . . . . . . . . . . . . . . . . . .185
Určení doby běhu hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186
Vytvoření hudebních bodů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187
Přesunutí hudebních bodů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187
Propojení spouštěcího tlačítka s hudební hrou . . . . . . . . . . . . . . . . 189
Vytvoření efektu vysunutí herní scény pomocí CSS3 . . . . . . . . . . .190
Ovládání hry klávesnicí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Zobrazení indikátoru. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193
Vyhodnocení zásahů bodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194
Odstranění prvku pole se zadaným indexem . . . . . . . . . . . . . . . . .195
Obohacení hry o další funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Nastavení hlasitosti melodie na základě úspěšnosti . . . . . . . . . . .196
Odstranění bodů ze hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199
Uložení úspěšnosti za posledních pět pokusů . . . . . . . . . . . . . . . .199
Uložení dat úrovně . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199
Zpracování události dokončení přehrávání . . . . . . . . . . . . . . . . . . . 202
Obsluha událostí elementu audio . . . . . . . . . . . . . . . . . . . . . . . . . .202
Shrnutí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
KAPITOLA 7
LOKÁLNÍ ÚLOŽIŠTĚ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
Lokální úložiště HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Vytvoření závěrečného dialogu . . . . . . . . . . . . . . . . . . . . . . . . . . . .206
Uložení výsledků v prohlížeči . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
Uložení a načtení dat z lokálního úložiště. . . . . . . . . . . . . . . . . . . .212
Datové typy a lokální úložiště . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
Lokální úložiště jako asociativní pole . . . . . . . . . . . . . . . . . . . . . . .213
Ukládání objektů do lokálního úložiště. . . . . . . . . . . . . . . . . . . . . . . 213
Určení aktuálního data a času v JavaScriptu . . . . . . . . . . . . . . . . .217
Převedení objektu na řetězec JSON. . . . . . . . . . . . . . . . . . . . . . . .218
K2023.indd 8
14.5.2012 10:26:06
Obsah
Načtení objektu z řetězce JSON. . . . . . . . . . . . . . . . . . . . . . . . . . .218
Prověření obsahu lokálního úložiště v konzole prohlížeče . . . . . . .219
Upozornění uživatele na překonání rekordu. . . . . . . . . . . . . . . . . . . 220
Uložení celkového postupu ve hře . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Uložení postupu ve hře. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
Odstranění rekordu z lokálního úložiště . . . . . . . . . . . . . . . . . . . . .226
Klonování pole v JavaScriptu . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
Obnovení postupu ve hře . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
Shrnutí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
KAPITOLA 8
HRA PRO VÍCE HRÁČŮ A WEBSOCKET. . . . . . . . . . . . . . . . . . . .233
Ukázka existující webové aplikace využívající rozhraní WebSocket 234
Instalace serveru WebSocket. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Instalace serveru node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236
Vytvoření serveru WebSocket vysílajícího počet
připojených klientů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237
Inicializace serveru WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . . .238
Naslouchání spojením na straně serveru . . . . . . . . . . . . . . . . . . . .239
Určení počtu klientů připojených k serveru . . . . . . . . . . . . . . . . . .239
Odeslání zprávy všem připojeným klientům . . . . . . . . . . . . . . . . . .239
Vytvoření klienta pro připojení k serveru WebSocket . . . . . . . . . . .240
Navázání spojení protokolem WebSocket . . . . . . . . . . . . . . . . . . .242
Klientské události rozhraní WebSocket . . . . . . . . . . . . . . . . . . . . .242
Vytvoření chatu s použitím rozhraní WebSocket . . . . . . . . . . . . . . . 242
Odeslání zprávy serveru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
Odeslání zprávy od klienta serveru. . . . . . . . . . . . . . . . . . . . . . . . .244
Příjem zpráv na straně serveru . . . . . . . . . . . . . . . . . . . . . . . . . . . .244
Přeposlání zpráv obdržených serverem . . . . . . . . . . . . . . . . . . . . . . 245
Srovnání rozhraní WebSocket s dotazováním . . . . . . . . . . . . . . . .246
Vytvoření sdíleného náčrtkového bloku s použitím plátna
a rozhraní WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Vytvoření lokálního náčrtkového bloku . . . . . . . . . . . . . . . . . . . . . .248
Odesláním kresby všem připojeným klientům . . . . . . . . . . . . . . . .251
K2023.indd 9
14.5.2012 10:26:06
Obsah
Vytvoření datového objektu pro komunikaci mezi klientem
a serverem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255
Převedení informací o nakreslených čarách
do formátu JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255
Nakreslení čar obdržených od ostatních klientů. . . . . . . . . . . . . . .256
Vytvoření hry Uhodni obrázek pro více hráčů . . . . . . . . . . . . . . . . . 256
Řízení hry pro více hráčů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
Výčet klientů připojených k serveru . . . . . . . . . . . . . . . . . . . . . . . .263
Odeslání zprávy klientovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
Vylepšení hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
Dekorace hry pomocí kaskádových stylů . . . . . . . . . . . . . . . . . . . . 265
Shrnutí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
KAPITOLA 9
HRA S FYZIKÁLNÍM ENGINEM BOX2D A PLÁTNEM . . . . . . . . . .269
Instalace knihovny Box2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Vytvoření nového světa s použitím třídy b2World. . . . . . . . . . . . . .273
Nastavení ohraničující oblasti s použitím třídy b2AABB . . . . . . . . .273
Nastavení gravitace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273
Zakázání spánku objektů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274
Vytvoření pevné země ve světě . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Definice tvaru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275
Vytvoření objektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275
Nakreslení světa na plátno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Vytvoření dynamického obdélníku ve světě . . . . . . . . . . . . . . . . . . . 279
Nastavení odrazivosti objektu. . . . . . . . . . . . . . . . . . . . . . . . . . . . .280
Nastavení času ve světě . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Přidání kol k obdélníku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Vytvoření auta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Spojení dvou objektů rotačním spojem . . . . . . . . . . . . . . . . . . . . .285
Ovládání auta klávesnicí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Aplikace sil na auto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286
Rozdíly mezi metodami ApplyForce a ApplyImpulse . . . . . . . . . . .287
Přidání nájezdových ramp do naší hry . . . . . . . . . . . . . . . . . . . . . .287
K2023.indd 10
14.5.2012 10:26:06
Obsah
Ověření kolizí ve světě . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Získání seznamu kolizí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290
Restartování hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Přidání úrovní do hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Nahrazení obrysů grafikou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Použití vlastnosti userData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300
Zobrazení grafiky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301
Rotace a translace obrázku na plátně . . . . . . . . . . . . . . . . . . . . . .301
Finální úpravy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Přidání omezeného množství paliva . . . . . . . . . . . . . . . . . . . . . . . .308
Zobrazení zbývajícího množství paliva . . . . . . . . . . . . . . . . . . . . . .308
Shrnutí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Herní enginy HTML5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310
Animace a textury hry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310
Zvukové efekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310
PŘÍLOHA
KVÍZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311
REJSTŘÍK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313
K2023.indd 11
7.6.2012 9:25:13
K2023.indd 12
14.5.2012 10:26:06
Úvod
Od HTML5 se toho hodně očekává, obzvláště pak v oblasti online her. Hry využívající HTML5 fungují na počítačích, chytrých telefonech i tabletech, včetně iPhonů
a iPadů. Buďte mezi prvními vývojáři, kteří již dnes vytvářejí v HTML5 hry pro zítřek.
Tato kniha vás seznámí s nejnovějšími webovými standardy HTML5 a CSS3 a jejich
použitím při tvorbě online karetních, kreslicích, fyzikálních, a dokonce i multiplayer
her. Kniha vás názorně a systematicky provede tvorbou celkem šesti ukázkových her.
HTML5, CSS3 a JavaScript – to jsou pojmy, které dnes na webu uslyšíte stále častěji. Tyto standardy otevírají nový herní průmysl, HTML5 hry. S jejich použitím
je možné navrhovat hry tvořené elementy HTML5, kaskádovými styly CSS3 a kódem
v JavaScriptu.
Kniha se skládá z devíti tematicky odlišných kapitol. V jejím průběhu vytvoříme šestici
her a dozvíme se, jak ve hrách vykreslovat objekty, animovat je, přidat zvuky, propojit
hráče a vytvořit fyzikální engine hry založený na systému Box2D.
Co v této knize najdete
Kapitola 1, Seznámení s hrami v HTML5, představuje nové funkce HTML5, CSS3
a JavaScriptu a ukazuje jejich využití při vývoji her.
Kapitola 2, Začínáme s vývojem her a DOM, ukazuje na vývoji klasické hry Ping Pong
základy DOM a knihovny jQuery.
Kapitola 3, Pexeso a CSS3, nás seznámí s novými funkcemi CSS3 a ukáže jejich použití při vývoji pexesa.
Kapitola 4, Hra Untangle a plátno, představí nový způsob vykreslování obsahu ve webové stránce a interakci s ním, založený na použití elementu plátna HTML5. Demonstruje také tvorbu logických her pomocí tohoto elementu.
K2023.indd 13
14.5.2012 10:26:06
Úvod
Kapitola 5, Vylepšená hra Untangle a plátno, rozšiřuje hru z předchozí kapitoly a ukazuje, jak lze prostřednictvím plátna vykreslovat gradienty a obrázky. Ukazuje také
použití animací a práci s více vrstvami obsahu.
Kapitola 6, Hudba, zvukové efekty a element audio, ukazuje, jak s použitím elementu
audio, obohatit hry o zvukové efekty přehrávané na pozadí. Řeč bude také o kompatibilitě různých audioformátů napříč jednotlivými webovými prohlížeči a v závěru
ukazuje tvorbu jednoduché hudební hry ovládané klávesnicí.
Kapitola 7, Lokální úložiště, rozšiřuje pexeso využívající CSS3 a demonstruje použití
nového lokálního úložiště HTML5 pro uložení informací o postupu ve hře a dosažených výsledků v ní a jejich zpětné načtení.
Kapitola 8, Hra pro více hráčů a WebSocket, popisuje aplikační rozhraní WebSocket,
s jehož pomocí může webový prohlížeč navázat perzistentní spojení se serverem. Díky
tomu může hru v reálném čase hrát i několik hráčů společně. V závěru kapitola ukazuje vývoj hry ve stylu „uhodni, co je na obrázku“.
Kapitola 9, Hra s fyzikálním enginem Box2D a plátnem, ukáže, jak zakomponovat
do her využívajících plátno známý fyzikální engine Box2D. Popisuje, jak vytvořit
fyzikální objekty, aplikovat síly, propojit je, spojit grafiku s fyzikou, a na závěr vše
demonstruje na karetní hře.
Co budete v této knize potřebovat
Neobjedete se bez moderního webového prohlížeče, dobrého textového editoru
a základních znalostí HTML, CSS a JavaScriptu.
Pro koho je tato kniha určena
Tato kniha cílí na vývojáře her se základními znalostmi HTML, CSS a JavaScriptu,
kteří chtějí vytvářet hry pro webové prohlížeče využívající možností plátna a DOM.
Použité konvence
V knize najdete několik stylů textu, které pomáhají odlišovat různé typy informací.
Zde je pár příkladů ukazujících použití těchto stylů a objasňujících jejich význam.
Programový kód je v textu vyznačen následovně: Vývoj hry v HTML5 začneme u souboru index.html.
Blok kódu má následující podobu:
// uložení času spuštění
var date = new Date();
14
K2023.indd 14
14.5.2012 10:26:06
Použité konvence
audiogame.startingTime = date.getTime();
// určení uplynulého času
var date = new Date();
var elapsedTime = (date.getTime() - audiogame.startingTime)/1000;
Pokud je třeba vyzdvihnout určitou část bloku kódu, jsou jeho odpovídající řádky či
položky vyznačeny tučně:
function setupLevelData()
{
var notes = audiogame.leveldata.split(";");
// uložení celkového počtu teček
audiogame.totalDotsCount = notes.length;
for(var i in notes)
{
var note = notes[i].split(",");
var time = parseFloat(note[0]);
var line = parseInt(note[1]);
var musicNote = new MusicNote(time,line);
audiogame.musicNotes.push(musicNote);
}
}
Veškerý vstup i výstup příkazového řádku má následující podobu:
$ ./configure
$ sudo make instar
Nové termíny a důležitá slova jsou zvýrazněná tučně. Slova, která můžete vidět na obrazovce, v nabídkách nebo dialozích, mají následující podobu: Klepněte pravým tlačítkem myši na položku Spustit experiment a zvolte Otevřít odkaz v novém okně.
V textu knihy se často setkáte s několika typy nadpisů.
Následující nadpis slouží k označení instrukcí, které popisují provedení určitého úkolu:
Jak na to
1. Akce 1
2. Akce 2
3. Akce 3
15
K2023.indd 15
14.5.2012 10:26:07
Úvod
Uvedené instrukce často potřebují dodatečné vysvětlení a popis. V takovém případě
za nimi následuje:
Vysvětlení
Pod tímto nadpisem najdete detailní popis úkolů nebo instrukcí, které jste právě
dokončili.
V knize najdete i další doprovodné informace, včetně následujících:
Kvíz
Krátké otázky, které vám pomohou ověřit si, zda jste všemu správně a zcela porozuměli.
Zkuste to sami
Tato část obsahuje praktické úkoly a poskytuje další nápady, jak experimentovat s tím,
co už znáte.
Varování a důležitá upozornění najdete v rámečcích, jako je tento.
Tipy a triky jsou uvedeny takto.
Zpětná vazba od čtenářů
Nakladatelství a vydavatelství Computer Press, které pro vás tuto knihu přeložilo,
stojí o zpětnou vazbu a bude na vaše podněty a dotazy reagovat. Můžete se obrátit
na následující adresy:
Computer Press
Albatros Media a.s., pobočka Brno
IBC
Příkop 4
602 00 Brno
nebo
[email protected]
Computer Press neposkytuje rady ani jakýkoliv servis pro aplikace třetích stran.
Pokud budete mít dotaz k programu, obraťte se prosím na jeho tvůrce.
16
K2023.indd 16
31.5.2012 13:26:39
Zdrojové kódy ke knize
Zdrojové kódy ke knize
Z adresy http://knihy.cpress.cz/K2023 si po klepnutí na odkaz Soubory ke stažení
můžete přímo stáhnout archiv s ukázkovými kódy.
Errata
Přestože jsme udělali maximum pro to, abychom zajistili přesnost a správnost obsahu, chybám se úplně vyhnout nelze. Pokud v některé z našich knih najdete chybu, ať
už v textu nebo v kódu, budeme rádi, pokud nám ji oznámíte. Ostatní uživatele tak
můžete ušetřit frustrace a nám pomůžete zlepšit následující vydání této knihy.
Veškerá existující errata zobrazíte na adrese http://knihy.cpress.cz/K2023 po klepnutí
na odkaz Soubory ke stažení.
17
K2023.indd 17
14.5.2012 10:26:08
K2023.indd 18
14.5.2012 10:26:08
KAPITOLA 1
Seznámení s hrami
v HTML5
Několik posledních dekád formoval podobu Internetu jazyk HTML (Hyper-Text
Markup Language). Definuje strukturu obsahu prezentovaného na webu a jeho propojení s dalšími souvisejícími stránkami. Jazyk HTML se vyvinul z verze 2 na verzi
4.1 a později na XHTML 1.1. Díky průkopnickým webovým aplikacím a sociálním
sítím je nyní jazyk HTML na cestě k HTML5.
CSS (Cascading Style Sheet) definuje vizuální prezentaci webových stránek. Určuje styly jednotlivých elementů stránky HTML, včetně stylu v různých stavech (např.
po přejetí myší nebo klepnutí).
JavaScript představuje logický řadič webové stránky. Právě díky němu mohou mít
webové stránky dynamický charakter a nabídnout interaktivitu s uživatelem. Kód
v JavaScriptu přistupuje k dokumentu HTML pomocí modelu DOM (Document
Object Model) a umožňuje na jeho elementy např. aplikovat odlišné kaskádové styly.
Tyto tři technologie otevírají dveře novému odvětví herního průmyslu, hrám v HTML5.
S jejich pomocí je možné navrhovat hry v prostředí HTML5 a jeho elementů, využívající CSS3 a JavaScript.
V této kapitole se dozvíme:
O nových funkcích HTML5.
Proč je okolo HTML5 a CSS3 takový rozruch.
 Jaké hry využívající HTML5 hrají ostatní.
 Jaké hry budeme vyvíjet v průběhu následujících kapitol.
Jdeme na to.


K2023.indd 19
14.5.2012 10:26:08
Kapitola 1 Seznámení s hrami v HTML5
Nové funkce HTML5
HTML5 a CSS3 přináší mnoho nových funkcí. Než se pustíme do samotného vývoje
her, ve stručnosti se s těmito novinkami seznámíme a podíváme se na jejich praktické využití při vývoji her.
Plátno
Plátno neboli také canvas je element HTML5, který umožňuje vykreslování objektů
a manipulaci s bitmapami na nízké úrovni. Na element plátna je možné nahlížet jako
na dynamický element obrázku. Tradiční element img zobrazí statický obrázek. Ať už
se jedná o dynamicky generovaný obrázek anebo obrázek uložený na serveru, zobrazí
se staticky a dále se již nemůže měnit. Je sice možné vyměnit datový zdroj elementu
img anebo na něj aplikovat nové styly, nelze však změnit kontext samotného obrázku.
Plátno naproti tomu funguje jako dynamický element img. Je možné do něj dynamicky
načítat obrázky, vykreslovat objekty a pracovat s jeho obsahem pomocí JavaScriptu.
Plátno hraje při vývoji her v HTML5 velmi důležitou roli, a proto bude v této knize
jednou z hlavních oblastí našeho zájmu.
Audio
Hudba přehrávaná na pozadí a nejrůznější zvukové efekty často bývají důležitým
aspektem vývoje her. HTML5 nabízí nativní podporu přehrávání audia v podobě elementu audio. Přehrávání zvukových efektů v našich HTML5 hrách tedy nevyžaduje
proprietární přehrávač Flashe. Použitím elementu audio se zabývá kapitola 6, Hudba,
zvukové efekty a element audio.
Geolokace
Díky geolokaci může webová stránka určit zeměpisnou šířku a délku počítače uživatele. Ještě před několika lety, když většina uživatelů přistupovala k Internetu z běžných
stolních počítačů, se tato funkce nezdála natolik důležitá. Poloha uživatele s přesností na ulici není v takovém případě nijak zvlášť užitečná. Přibližnou lokalitu uživatele
je možné získat analýzou jeho adresy IP.
Dnes se však k Internetu stále více uživatelů připojuje pomocí svých chytrých telefonů. Moderní webové prohlížeče založené na jádře Webkit se dnes ukrývají téměř
v každé kapse. Otevírá se tak prostor pro mobilní aplikace a hry, které využívají aktuální polohu uživatele zjištěnou pomocí geolokace.
Zjišťování polohy našlo uplatnění již v několika sociálních sítích, jako je foursquare
(http://foursquare.com) a Gowalla (http://gowalla.com). Jejich úspěch dal vzniknout
novému trendu v oblasti určování polohy pomocí chytrého telefonu.
20
K2023.indd 20
14.5.2012 10:26:08
Nové funkce HTML5
WebGL
WebGL rozšiřuje element plátna HTML5 o aplikační rozhraní umožňující zobrazování 3D grafiky ve webovém prohlížeči. Toto aplikační rozhraní vychází ze standardu OpenGL ES 2.0 a jedná se o vynikající řešení pro 3D hry v HTML5. Bohužel ne
všechny webové prohlížeče, v době psaní této knihy, WebGL podporují. V tuto chvíli
se jeho podporou pyšní Mozilla Firefox 4, Google Chrome a noční sestavení prohlížeče WebKit.
Postup vývoje her, které využívají WebGL, se značně liší od vývoje běžných her
v HTML5. Hry založené na WebGL musí pracovat s 3D modely a používat rozhraní
podobné OpenGL. Z toho důvodu se jimi v této knize nebudeme zabývat.
Následující obrázek ukazuje aplikaci Google Body (http://bodybrowser.googlelabs.
com), která s pomocí rozhraní WebGL umožňuje třírozměrné zobrazení lidského těla
v závislosti na parametrech zadaných uživatelem.
TIP
Na webu LearningWebGL (http://learnwebgl.com) najdete několik návodů, které vám
pomohou se začátky WebGL. Jedná se o dobrý odrazový můstek, chcete-li se o této
technologii dozvědět více.
21
K2023.indd 21
14.5.2012 10:26:09
Kapitola 1 Seznámení s hrami v HTML5
WebSocket
Rozhraní WebSocket, které je součástí specifikace HTML5, umožňuje webové stránce navázat spojení se serverem. Jedná se o spojení mezi prohlížečem a serverem řízené událostmi. To znamená, že se klient nemusí v pravidelných intervalech neustále
dotazovat serveru na nová data. Server zašle prohlížeči aktualizace hned, jak jsou
k dispozici. Hlavní výhodou tohoto řešení je, že spolu mohou jednotliví hráči vzájemně komunikovat téměř v reálném čase. Když hráč provede nějakou akci a serveru
se odešlou data, upozorní server na tuto událost všechny připojené prohlížeče. Ty tak
mohou reagovat na to, co jeden z hráčů právě udělal. Díky tomuto rozhraní se otevírá
prostor pro tvorbu multiplayer her v HTML5.
UPOZORNĚNÍ
Kvůli chybě v zabezpečení je nyní rozhraní WebSocket v prohlížečích Mozilla Firefox
a Opera dočasně zablokované. Také prohlížeče Safari a Google Chrome mohou jeho
podporu přerušit, než se bezpečnostní trhlinu podaří vyřešit. Více se o tomto problému dozvíte na adrese http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/.
/
Lokální úložiště
HTML5 nabízí perzistentní datové úložiště, které mohou webové stránky využívat.
Lokální úložiště umožňuje trvale ukládat páry klíčů a hodnot. Data se zachovají
i po ukončení prohlížeče a navíc není přístup k nim omezený pouze na danou stránku.
Mohou k nim přistupovat všechny stránky v rámci dané domény. S použitím lokálního úložiště tak lze snadno ukládat stavové informace o hře, jako jsou např. postup
hráče nebo dosažené výsledky, lokálně, přímo v prohlížeči.
HTML5 nabízí také databázi Web SQL. Jedná se o relační databázi na straně klienta,
kterou v tuto chvíli podporují prohlížeče Safari, Google Chrome a Opera. S použitím této relační databáze je přirozeně možné ukládat nejen páry klíčů a hodnot, ale
i mnohem složitější relační struktury, které lze následně získávat pomocí dotazů SQL.
Lokální úložiště i databáze Web SQL přijdou při vývoji her vhod pro lokální ukládání stavových informací o hře.
Kromě lokálního úložiště nabízí moderní webové prohlížeče i jiné metody lokálního
ukládání dat. Jedná se o již zmíněnou databázi Web SQL nebo také IndexedDB. Tyto
databáze podporují i složitější dotazy na uložená data, obsahující podmínky, a jsou
tedy mnohem vhodnější pro složitější datové struktury.
Více informací o databázích Web SQL a IndexedDB najdete na webu Mozilly, na adrese http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/.
22
K2023.indd 22
14.5.2012 10:26:09
Nové funkce CSS3
Offline aplikace
Procházení webovými stránkami běžně vyžaduje připojení k Internetu, s výjimkou
webových stránek uložených v mezipaměti prohlížeče, které v ní zpravidla příliš dlouho nezůstanou. HTML5 zavádí tzv. cache manifest neboli seznam souborů, které se
mají uložit pro pozdější offline přístup.
V tomto seznamu lze uvést veškeré soubory, ze kterých hra sestává, jako je její grafika, soubory s kódem v JavaScriptu a soubory HTML. Naše hry v HTML5 můžeme
tímto způsobem proměnit v offline hry pro stolní počítače i mobilní zařízení. Hráči
je mohou hrát dokonce i v letadle.
Následující obrázek ze hry Pie Guy (http://mrgan.com/pieguy) ukazuje hru v HTML5
běžící na iPhonu bez připojení k Internetu. Všimněte si symbolu letadla v levé horní
části obrazovky, která indikuje offline stav:
Nové funkce CSS3
Zatímco jazyk HTML stanoví obsah, kaskádové styly definují jeho formu, tedy jak
bude obsah dokumentu HTML vypadat. Vývoj her v HTML5 se bez kaskádových stylů
obejde jen stěží, obzvláště pak u her, které intenzivně využívají DOM. Hrám zobrazujícím obsah v elementu plátna může k tvorbě a stylování obsahu stačit jen JavaScript.
Avšak hry, které jsou založené na manipulaci s elementy dokumentu HTML, budou
kaskádové styly zcela jistě potřebovat. Podívejme se tedy na novinky v CSS3 a jejich
uplatnění při vývoji her.
Místo vykreslování obsahu na plátně je, s použitím nových funkcí CSS3, možné animovat přímo elementy dokumentu HTML. Tímto způsobem lze snadno vytvářet
i komplikovanější hry pro webové prohlížeče.
23
K2023.indd 23
14.5.2012 10:26:10
Kapitola 1 Seznámení s hrami v HTML5
Přechody
Běžně se styl elementu změní hned poté, co dojde k aplikaci stylu nového. Přechody
CSS3 umožňují plynule přecházet mezi změnami stylu cílových elementů.
Řekněme, že máme modrý obdélník a chceme, aby se jeho barva změnila na červenou, najede-li na něj uživatel kurzorem myši. Kód by mohl vypadat takto:
HTML:
<a href="#" class="box"></a>
CSS:
a.box {
display:block;
width: 100px;
height: 100px;
background: #00f; /* modrá */
border: 1px solid #000;
}
a.box:hover {
background: #f00; /* červená */
}
Obdélník se přebarví na červeno hned po přejetí kurzorem myši. S použitím přechodů CSS3 lze tuto záměnu stylů provést v zadané době trvání a s použitím specifikované vyhlazovací funkce:
a.box {
-webkit-transition: all 5s linear;
}
Následující obrázek ukazuje popisovaný efekt s aplikovaným přechodem:
24
K2023.indd 24
14.5.2012 10:26:10
Nové funkce CSS3
UPOZORNĚNÍ
Vzhledem k tomu, že je specifikace CSS3 stále ve fázi návrhu a ještě není finální, může
se její implementace v jednotlivých webových prohlížečích od specifikace W3C mírně
odlišovat. Z toho důvodu vývojáři prohlížečů často opatřují své implementace funkcí
CSS3 předponou, aby se zabránilo případným konfliktům.
Prohlížeče Safari a Google Chrome používají předponu -webkit-, Opera -o-, Firefox
-moz- a Internet Explorer zase -ms-. V tuto chvíli je proto deklarace vlastností CSS3, jako
je např. stín elementu, poměrně nepřehledná, protože vyžaduje vícenásobné zadání
téže vlastnosti pro různé prohlížeče. Poté, co se specifikace dané vlastnosti dokončí, dá
se u ní očekávat eliminace těchto předpon.
Ve většině příkladů v této knize najdete pouze prefix -webkit-, aby se zabránilo nepřehlednosti kódu. Důležitější je pochopit princip, než pořád dokola číst deklarace stejných
vlastností pro různé prohlížeče.
Transformace
Pomocí transformací CSS3 je možné měnit velikost elementů, otáčet s nimi a měnit
jejich pozici. Transformace CSS3 se dělí na 2D a 3D.
Ke změně pozice elementu slouží funkce translate:
-webkit-transform: translate(x,y);
Změnu velikosti elementu umožňuje zase funkce scale:
-webkit-transform: scale(1.1);
Elementy je možné současně otáčet i měnit jejich velikost, případně kombinovat jiné
transformace:
a.box {
-webkit-transition: all 0.5s linear;
-webkit-transform: translate(100px,50px);
}
a.box:hover {
-webkit-transform: translate(100px,50px) scale(1.1) rotate(30deg);
}
Následující obrázek ukazuje, jak bude výsledná transformace po přejetí myší nad elementem vypadat:
25
K2023.indd 25
14.5.2012 10:26:11