tytuł oryginału: html5 canvas cookbook

38

Upload: others

Post on 04-Nov-2021

31 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tytuł oryginału: HTML5 Canvas Cookbook
Page 2: Tytuł oryginału: HTML5 Canvas Cookbook

Tytuł oryginału: HTML5 Canvas CookbookTłumaczenie: Piotr Rajca

ISBN: 978-83-246-5075-0

© Helion 2013.All rights reserved.

Copyright © Packt Publishing 2011.First published in the English language under the title ‘HTML5 Canvas Cookbook’.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były kompletnei rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/ht5cre.zip

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/ht5creMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Tytuł oryginału: HTML5 Canvas Cookbook

Spis tre�ci

Zespó� oryginalnego wydania 7

O autorze 8

O recenzentach 9

Wst�p 11

Zagadnienia opisywane w tej ksi��ce 11Co jest potrzebne podczas lektury tej ksi��ki? 13Dla kogo jest przeznaczona ta ksi��ka? 13Czym s� elementy canvas wprowadzone w HTML5? 13Stosowane konwencje 14Pobieranie przyk�adowych kodów towarzysz�cych ksi��ce 15

Rozdzia� 1. Wprowadzenie do operacji na �cie�kach i tekstach 17

Wprowadzenie 17Rysowanie linii 18Rysowanie �uku 21Rysowanie krzywej kwadratowej 23Rysowanie krzywej Béziera 25Rysowanie zygzaków 26Rysowanie spirali 28Praca z tekstem 30Rysowanie trójwymiarowego tekstu z cieniem 31Wyzwalanie pot�gi fraktali — rysowanie nawiedzonego drzewa 33

Rozdzia� 2. Rysowanie kszta�tów i elementów z�o�onych 37

Wprowadzenie 37Rysowanie prostok�ta 38Rysowanie okr�gu 40Tworzenie w�asnych kszta�tów i stosowanie stylów wype�nienia 42Zabawa z krzywymi Béziera — rysowanie chmurki 45

Page 4: Tytuł oryginału: HTML5 Canvas Cookbook

Spis tre�ci

4

Rysowanie przezroczystych kszta�tów 47Korzystanie ze stosu stanu kontekstu w celu zapisywania i odtwarzania stylów 48Stosowanie operacji z�o�onych 51Wykorzystanie p�tli do tworzenia wzorców — rysowanie ko�a z�batego 56Stosowanie warto�ci losowych we w�a�ciwo�ciach kszta�tów — rysowanie ��ki kwiatów 59Tworzenie funkcji rysuj�cych niestandardowe kszta�ty — talie kart 62Po��czenie wszystkich wiadomo�ci — rysowanie odrzutowca 67

Rozdzia� 3. Praca z obrazami i klipami wideo 75

Wprowadzenie 75Wy�wietlanie obrazu 76Przycinanie obrazka 77Kopiowanie i wklejanie fragmentów obszaru p�ótna 80Korzystanie z klipów wideo 82Pobieranie danych obrazu 84Wprowadzenie do manipulowania danymi obrazu — odwracanie kolorów 87Odwracanie kolorów w klipach wideo 89Konwersja kolorów rysunku na skal� szaro�ci 91Przekszta�canie rysunku na posta� danych URL 93Zapisywanie rysunku w formie obrazu 95Wczytywanie zawarto�ci rysunku przekazanej w formie danych URL 97Wyostrzanie obrazka o powi�kszonych pikselach 99

Rozdzia� 4. Stosowanie przekszta�ce� 103

Wprowadzenie 103Przesuwanie kontekstu p�ótna 104Obrót kontekstu p�ótna 105Skalowanie kontekstu p�ótna 107Tworzenie odbicia lustrzanego 109Tworzenie przekszta�ce� niestandardowych 110Pochylanie kontekstu p�ótna 112Obs�uga wielu przekszta�ce� z wykorzystaniem stosu stanu 113Przekszta�canie okr�gu na owal 116Obracanie obrazka 118Rysowanie prostego logo i losowe okre�lanie jego po�o�enia, obrotu i skali 119

Rozdzia� 5. O�ywianie p�ócien poprzez zastosowanie animacji 123

Wprowadzenie 124Tworzenie klasy Animation 124Tworzenie ruchu liniowego 128Tworzenie przyspieszenia 130Tworzenie oscylacji 133Oscyluj�cy b�belek 135Ruchome wahad�o 137Animowane ko�a z�bate 140Animowany zegar 145

Page 5: Tytuł oryginału: HTML5 Canvas Cookbook

Spis tre�ci

5

Symulacja fizyki cz�stek 149Tworzenie mikroskopijnych �yj�tek 153Dzia�anie w warunkach zwi�kszonego obci��enia i prezentowanie liczby ramek na sekund� 157

Rozdzia� 6. Interakcja z elementami canvas— do��czanie procedur obs�ugi zdarze� do kszta�tów i regionów 163

Wprowadzenie 164Tworzenie klasy Events 164Korzystanie ze wspó�rz�dnych myszy w obszarze elementu canvas 172Do��czanie procedur obs�ugi zdarze� myszy do regionów 174Do��czanie procedur obs�ugi zdarze� dotyku do regionów na urz�dzeniach przeno�nych 178Do��czanie procedur obs�ugi zdarze� do obrazków 181Przeci�ganie i upuszczanie kszta�tów 185Przeci�ganie i upuszczanie obrazków 188Tworzenie powi�kszania fragmentu obrazka 190Tworzenie aplikacji graficznej 196

Rozdzia� 7. Tworzenie grafów i wykresów 203

Wprowadzenie 203Tworzenie wykresu ko�owego 204Tworzenie wykresu s�upkowego 209Wizualizacja równa� 216Rysowanie danych punktowych przy u�yciu wykresu liniowego 221

Rozdzia� 8. Ratujemy �wiat, pisz�c now� gr� 229

Wprowadzenie 229Tworzenie arkuszy sprite’ów dla bohatera i jego przeciwników 232Tworzenie obrazów poziomów oraz map obszarów 234Tworzenie klasy Actor reprezentuj�cej bohatera i jego przeciwników 238Tworzenie klasy Level 243Klasa HealthBar 245Tworzenie klasy Controller 246Tworzenie klasy Model 251Tworzenie klasy View 260Przygotowanie dokumentu HTML i uruchamianie gry 265

Rozdzia� 9. Wprowadzenie do WebGL 267

Wprowadzenie 267Tworzenie klasy upraszczaj�cej korzystanie z API WebGL 268Rysowanie trójk�ta 281Obracanie p�askiego trójk�ta w przestrzeni trójwymiarowej 283Tworzenie obracaj�cego si� sze�cianu 286Dodawanie tekstur i o�wietlenia 290Tworzenie trójwymiarowego �wiata, który mo�na eksplorowa� 296

Page 6: Tytuł oryginału: HTML5 Canvas Cookbook

Spis tre�ci

6

Dodatek A. Wykrywanie obs�ugi elementów canvas 309

Tre�� zast�pcza dla elementów canvas 309

Dodatek B. Bezpiecze�stwo korzystania z elementów canvas 313

Dodatek C. Dodatkowe zagadnienia 315

Elementy canvas a efekty przej�� i animacje CSS3 315Wydajno�� elementów canvas na urz�dzeniach przeno�nych 316

Skorowidz 317

Page 7: Tytuł oryginału: HTML5 Canvas Cookbook

1

Wprowadzeniedo operacji na �cie�kach

i tekstach

W tym rozdziale zostan� opisane nast�puj�ce zagadnienia:� rysowanie linii,� rysowanie �uków,� rysowanie krzywych kwadratowych,� rysowanie krzywych Béziera,� rysowanie zygzaków,� rysowanie spiral,� praca z tekstem,� rysowanie trójwymiarowych tekstów z cieniem,� wyzwolenie pot�gi fraktali — rysowanie nawiedzonego drzewa.

WprowadzenieCelem tego rozdzia�u jest przedstawienie najwa�niejszych mo�liwo�ci elementów canvas wpro-wadzonych w j�zyku HTML5 (nazywanych tak�e „p�ótnem”). Mo�liwo�ci te zostan� zademon-strowane w serii coraz bardziej z�o�onych przyk�adów. API — interfejs programowania aplikacji— elementów canvas dostarcza podstawowych narz�dzi niezb�dnych do rysowania i okre�lania

Page 8: Tytuł oryginału: HTML5 Canvas Cookbook

HTML5 Canvas. Receptury

18

wygl�du (stylu) ró�nych typów pod�cie�ek, takich jak linie, �uki, krzywe kwadratowe, krzywe Bé-ziera, oraz do ��czenia ich w celu tworzenia �cie�ek. Interfejs ten zapewnia tak�e pe�ne wsparciedla rysowania tekstów, udost�pniaj�c przy tym kilka w�a�ciwo�ci pozwalaj�cych na okre�lanie ichstylu. Zaczynajmy!

Rysowanie liniiPodczas rozpoczynania nauki korzystania z p�ócien HTML5 wi�kszo�� osób jest zainteresowanarysowaniem podstawowych elementów. Ta receptura pokazuje, jak narysowa� lini�.

Jak to zrobi�Aby narysowa� fragment pochy�ej linii prostej, nale�y wykona� nast�puj�ce czynno�ci:

1. Zdefiniowa� kontekst 2d (dwuwymiarowy) p�ótna i okre�li� styl linii:

window.onload = function(){ // pobranie elementu canvas na podstawie jego identyfikatora var canvas = document.getElementById("myCanvas"); // deklaracja kontekstu 2D przy u�yciu metody getContext() obiektu canvas var context = canvas.getContext("2d"); // ustawienie szeroko�ci linii na 10 pikseli context.lineWidth = 10; // ustawienie koloru linii na niebieski context.strokeStyle = "blue";

2. Umiejscowi� kontekst p�ótna i narysowa� lini�:

// ustawienie po�o�enia kursora context.moveTo(50, canvas.height - 50); // rysowanie linii context.lineTo(canvas.width - 50, 50); // wy�wietlenie linii przy wykorzystaniu wybranego wcze�niej koloru context.stroke();};

Page 9: Tytuł oryginału: HTML5 Canvas Cookbook

Rozdzia� 1. • Wprowadzenie do operacji na �cie�kach i tekstach

19

3. Umie�ci� element canvas w tre�ci dokumentu HTML:

<canvas id="myCanvas" width="600" height="250" style="border:1pxsolid black;"></canvas>

Pobieranie kodów przyk�adów

Zarówno kody przyk�adów, jak i inne zasoby mo�na pobra� z serwera FTP wydawnictwa Helion —ftp://ftp.helion.pl/przyklady/ht5cre.zip.

Jak to dzia�aJak wida� na powy�szym przyk�adzie, zanim b�dzie mo�na odwo�a� si� do elementu canvas napodstawie jego identyfikatora, nale�y poczeka� na wczytanie ca�ej strony. Mo�na to zrobi�, u�ywaj�cinicjalizatora window.onload. Po zakoczeniu wczytywania strony mo�na ju� odwo�a� si� do ele-mentu canvas w drzewie DOM strony, u�ywaj�c w tym celu metody document.getElementById(),a nast�pnie zdefiniowa� dwuwymiarowy (2d) kontekst p�ótna, przekazuj�c parametr "2d" w wy-wo�aniu metody getContext() obiektu canvas. W ostatnich dwóch rozdzia�ach ksi��ki pokaza-no, �e mo�na tworzy� tak�e konteksty trójwymiarowe. W tym przypadku w wywo�aniu metodygetContext() nale�y przekaza� parametr "webgl", "experimental-webgl" b�d� jeszcze inny.

Podczas rysowania konkretnego elementu, takiego jak �cie�ka, pod�cie�ka lub kszta�t, koniecz-nie nale�y pami�ta� o tym, �e jego styl mo�na zmieni� w ka�dej chwili — zarówno przed rozpo-cz�ciem, jak i po zakoczeniu rysowania — aby styl jednak zosta� uwzgl�dniony, trzeba go za-stosowa� bezpo�rednio po narysowaniu elementu. Grubo�� linii mo�na okre�li� przy u�yciuw�a�ciwo�ci lineWidth, a jej kolor przy zastosowaniu w�a�ciwo�ci strokeStyle. Mo�na uzna�, �ete czynno�ci przypominaj� rysowanie na kartce papieru — zanim zaczniemy rysowa�, wybieramykredk� (strokeStyle) o okre�lonej grubo�ci (lineWidth).

Kiedy ju� we�miemy do r�ki kredk�, mo�emy umie�ci� j� w dowolnym miejscu (punkcie rozpo-cz�cia rysowania). Do tego celu s�u�y metoda moveTo():

context.moveTo(x,y);

Kontekst p�ótna mo�na sobie wyobrazi� jako kursor s�u��cy do rysowania. Metoda moveTo()tworzy now� pod�cie�k� w okre�lonym punkcie. Lewy górny wierzcho�ek p�ótna ma wspó�rz�dne(0,0), natomiast wspó�rz�dne prawego dolnego wierzcho�ka to szeroko�� i wysoko�� elementucanvas.

Po umieszczeniu kursora rysuj�cego w okre�lonym punkcie mo�emy narysowa� lini�, u�ywaj�cmetody lineTo(), w której wywo�aniu przekazywane s� wspó�rz�dne punktu kocowego:

context.lineTo(x,y);

Page 10: Tytuł oryginału: HTML5 Canvas Cookbook

HTML5 Canvas. Receptury

20

I w kocu, aby linia sta�a si� widoczna, trzeba wywo�a� metod� stroke(). Je�li przed narysowa-niem linii nie wybierzemy innego koloru, to domy�lnie b�dzie ona mia�a kolor czarny.

Poni�ej przedstawiono podstawow� procedur�, jak� nale�y wykona� w celu narysowania liniiprzy u�yciu API elementów canvas:

1. Okre�lenie stylu linii (odpowiadaj�ce wybraniu kredki o danej grubo�ci). 2. Umieszczenie kontekstu p�ótna w wybranym miejscu przy u�yciu metody moveTo()(odpowiadaj�ce umieszczeniu kredki w danym miejscu kartki papieru).

3. Narysowanie linii poprzez wywo�anie metody lineTo(). 4. Wy�wietlenie linii za po�rednictwem wywo�ania metody stroke().

Dodatkowe informacjeRysowane linie mog� mie� trzy ró�ne rodzaje zakocze: butt (prostok�tne), round (okr�g�e) orazsquare (kwadratowe). Styl zakocze mo�na okre�la� przy u�yciu w�a�ciwo�ci lineCap kontekstup�ótna. Domy�lnie stosowane jest zakoczenie butt. Wszystkie trzy style zakocze zosta�yprzedstawione na poni�szym rysunku. Na samej górze widoczny jest domy�lny styl zakocze— butt; �rodkow� lini� narysowano przy wykorzystaniu stylu zakocze round, a najni�sz� —przy zastosowaniu stylu square.

Nale�y zwróci� uwag�, �e �rodkowa i dolna linia s� nieco d�u�sze od górnej, cho� ich d�ugo�ci s�takie same. Dzieje si� tak dlatego, �e w przypadku zastosowania stylu round oraz square zako-czenia linii powi�kszaj� jej d�ugo�� o warto�� równ� jej szeroko�ci. Je�li rysujemy na przyk�adlini� o d�ugo�ci 200 pikseli i szeroko�ci 10 pikseli i zastosujemy przy tym styl zakocze round, toostateczna d�ugo�� linii wyniesie 210 pikseli, gdy� ka�de z jej zakocze powi�kszy jej d�ugo��o 5 pikseli.

Patrz tak�e� „Rysowanie zygzaków”.� „Po��czenie wszystkich wiadomo�ci — rysowanie odrzutowca” w rozdziale 2.

Page 11: Tytuł oryginału: HTML5 Canvas Cookbook

Rozdzia� 1. • Wprowadzenie do operacji na �cie�kach i tekstach

21

Rysowanie �ukuCzasami mo�e si� pojawi� konieczno�� narysowania idealnego �uku. Ta receptura mo�e si� przy-da�, je�li chcemy narysowa� radosn� t�cz�, u�miechni�t� bu�k� lub jakie� diagramy.

Jak to zrobi�Aby narysowa� �uk, nale�y wykona� nast�puj�ce czynno�ci:

1. Zdefiniowa� kontekst 2d p�ótna i okre�li� styl �uku:

window.onload = function(){ var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d"); context.lineWidth = 15; context.strokeStyle = "black"; // kolor linii

2. Narysowa� �uk:

context.arc(canvas.width / 2, canvas.height / 2 + 40, 80, 1.1 * Math.PI,�1.9 * Math.PI, false);context.stroke();};

3. Umie�ci� element canvas w tre�ci dokumentu HTML:

<canvas id="myCanvas" width="600" height="250" style="border:1px solid black;"></canvas>

Jak to dzia�aDo narysowania �uku, zdefiniowanego jako fragment umownego okr�gu, s�u�y metoda arc().Przyjrzyjmy si� nast�puj�cemu diagramowi:

Page 12: Tytuł oryginału: HTML5 Canvas Cookbook

HTML5 Canvas. Receptury

22

Umowny okr�g jest definiowany przy u�yciu punktu stanowi�cego jego �rodek i promienia.Z kolei rysowany fragment okr�gu definiujemy, podaj�c par� k�tów — pocz�tkowy i kocowy— oraz informacj�, czy �uk ma by� rysowany zgodnie z kierunkiem ruchu wskazówek zegara,czy w kierunku przeciwnym.

context.arc( srodekX, srodekY, promien, katPoczatkowy, katKoncowy, przeciwnieDoRuchuWskazowekZegara);

Trzeba pami�ta�, �e k�ty zaczynaj� si� od warto�ci 0� z prawej strony okr�gu i zmieniaj� si�w kierunku zgodnym z kierunkiem ruchu wskazówek zegara, poprzez warto�ci 3�/2, �, �/2,z powrotem do 0. W tym przyk�adzie zastosowali�my k�t pocz�tkowy o warto�ci 1,1� oraz k�tkocowy o warto�ci 1,9�. Oznacza to, �e k�t pocz�tkowy znajduje si� nieco powy�ej �rodka, z le-wej strony umownego okr�gu, a k�t kocowy — nieco powy�ej �rodka, z prawej strony okr�gu.

Dodatkowe informacjeWarto�ci k�ta pocz�tkowego i kocowego nie musz� wcale zawiera� si� w zakresie od 0� do 2�— mog� to by� dowolne liczby rzeczywiste, gdy� nic nie stoi na przeszkodzie, by k�ty zacho-dzi�y na siebie.

Za�ó�my, �e k�t pocz�tkowy wynosi 3�. Odpowiada to jednemu pe�nemu obrotowi wokó� okr�gu(2�) oraz po�owie kolejnego obrotu (1�). Innymi s�owy, warto�� 3� jest odpowiednikiem warto�ci1�. I jeszcze jeden przyk�ad — warto�� –3� tak�e jest odpowiednikiem warto�ci 1�, gdy�w tym przypadku k�t zatoczy jeden pe�ny obrót i dodatkowe pó� obrotu wokó� okr�gu, w kie-runku przeciwnym do kierunku ruchu wskazówek zegara, i ostatecznie znajdzie si� w po�o�eniuodpowiadaj�cym warto�ci k�towi 1�.

Innym sposobem rysowania �uków w elemencie canvas jest u�ycie metody arcTo(). W tymprzypadku �uk definiowany jest na podstawie punktu kontekstu, punktu kontrolnego orazpromienia.

context.arcTo(punktKontrolnyX1, punktKontrolnyY1, punktKoncowyX, punktKoncowyY,�promien);

Page 13: Tytuł oryginału: HTML5 Canvas Cookbook

Rozdzia� 1. • Wprowadzenie do operacji na �cie�kach i tekstach

23

W odró�nieniu od metody arc(), która rysuje okr�g wokó� okre�lonego �rodka, metoda arcTo()zale�y od punktu kontekstu, przez co jest nieco podobna do metody lineTo(). Metoda arcTo()jest najcz��ciej u�ywana do tworzenia zaokr�glonych wierzcho�ków podczas rysowania �cie�eki kszta�tów.

Patrz tak�e� „Rysowanie okr�gu” w rozdziale 2.� „Animowane ko�a z�bate” w rozdziale 5.� „Animowany zegar” w rozdziale 5.

Rysowanie krzywej kwadratowejW tej recepturze wyja�niono, jak rysowa� krzywe kwadratowe. Krzywe tego typu zapewniaj�znacznie wi�ksz� elastyczno�� i pozwalaj� na rysowanie krzywizn bardziej naturalnych od swychkuzynów �uków i doskonale nadaj� si� do tworzenia dowolnych kszta�tów.

Jak to zrobi�Aby narysowa� krzyw� kwadratow�, nale�y wykona� nast�puj�ce czynno�ci:

1. Zdefiniowa� kontekst 2d p�ótna:

window.onload = function(){ var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d");

context.lineWidth = 10; context.strokeStyle = "black"; // kolor linii

2. Odpowiednio umie�ci� punkt kontekstu i narysowa� krzyw� kwadratow�:

context.moveTo(100, canvas.height - 50); context.quadraticCurveTo(canvas.width / 2, -50, canvas.width

Page 14: Tytuł oryginału: HTML5 Canvas Cookbook

HTML5 Canvas. Receptury

24

- 100, canvas.height - 50); context.stroke();};

3. Umie�ci� element canvas w tre�ci dokumentu HTML:

<canvas id="myCanvas" width="600" height="250" style="border:1px solid black;"></canvas>

Jak to dzia�aKrzywe kwadratowe rysowane w elemencie canvas s� definiowane przez punkt kontekstu, punktkontrolny oraz punkt kocowy:

context.quadraticCurveTo(kontrolnyX,kontrolnyY,punktKocowyX,punktKoncowyY);

Przeanalizujmy nast�puj�cy diagram:

Krzywizna krzywej tego typu jest styczna do trzech stycznych charakterystycznych. W swojejpierwszej cz��ci krzywa kwadratowa jest styczna do umownej prostej przechodz�cej przez punktkontekstu i punkt kontrolny. W szczytowym miejscu wygi�cia krzywa jest styczna do umownejprostej przechodz�cej przez dwa punkty �rodkowe — punktrodkowy1 oraz punktrodkowy2.W swojej kocowej cz��ci krzywa jest styczna do umownej prostej przechodz�cej przez punktykontrolny i kocowy.

Patrz tak�e� „Po��czenie wszystkich wiadomo�ci — rysowanie odrzutowca” w rozdziale 2.� „Wyzwolenie pot�gi fraktali — rysowanie nawiedzonego drzewa”.

Page 15: Tytuł oryginału: HTML5 Canvas Cookbook

Rozdzia� 1. • Wprowadzenie do operacji na �cie�kach i tekstach

25

Rysowanie krzywej BézieraJe�li krzywa kwadratowa nie zaspokaja naszych potrzeb, to by� mo�e zrobi to krzywa Béziera.Krzywe Béziera, nazywane tak�e krzywymi sze�ciennymi, s� najbardziej zaawansowanym ro-dzajem krzywych dost�pnych w API elementach canvas.

Jak to zrobi�Aby narysowa� krzyw� Béziera, nale�y wykona� nast�puj�ce czynno�ci:

1. Zdefiniowa� kontekst 2d p�ótna:

window.onload = function(){ var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d");

context.lineWidth = 10; context.strokeStyle = "black"; // kolor linii context.moveTo(180, 130);

2. Odpowiednio umie�ci� punkt kontekstu i narysowa� krzyw� kwadratow�:

context.bezierCurveTo(150, 10, 420, 10, 420, 180); context.stroke();};

3. Umie�ci� element canvas w tre�ci dokumentu HTML:

<canvas id="myCanvas" width="600" height="250" style="border:1px solid black;"></canvas>

Jak to dzia�aKrzywe Béziera rysowane w elementach canvas s� definiowane przez punkt kontekstu, dwa punktykontrolne oraz punkt kocowy. Dodatkowy punkt kontrolny zapewnia znacznie wi�ksz� kontrol�nad postaci� krzywizny, ni� by�o to mo�liwe w przypadku krzywych kwadratowych:

context.bezierCurveTo(punktKontrolnyX1, punktKontrolnyY1, punktKontrolnyX2,�punktKontrolnyY2, punktKoncowyX, punktKoncowyY);

Page 16: Tytuł oryginału: HTML5 Canvas Cookbook

HTML5 Canvas. Receptury

26

Przeanalizujmy nast�puj�cy diagram:

W odró�nieniu od krzywych kwadratowych, definiowanych przez trzy styczne charakterystyczne,krzywe Béziera s� definiowane przez pi�� stycznych. Pierwsza, pocz�tkowa cz��� krzywej jeststyczna do umownej prostej przechodz�cej przez punkt kontekstu i pierwszy punkt kontrolny.Kolejna cz��� krzywej jest styczna do umownej prostej przechodz�cej przez punktrodkowy1oraz punktrodkowy3. Wierzcho�ek krzywizny jest styczny do umownej prostej przechodz�cejprzez punktrodkowy2 i punktrodkowy4. Czwarta cz��� krzywej jest styczna do umownej pro-stej przechodz�cej przez punktrodkowy3 oraz punktrodkowy5. Ostatnia cz��� krzywej jeststyczna do umownej prostej przechodz�cej przez drugi punkt kontrolny i punkt kocowy.

Patrz tak�e� „Stosowanie warto�ci losowych we w�a�ciwo�ciach kszta�tów — rysowanie pola

kwiatów” w rozdziale 2.� „Po��czenie wszystkich wiadomo�ci — rysowanie odrzutowca” w rozdziale 2.

Rysowanie zygzakówTa receptura przedstawia sposób rysowania �cie�ki, która powstanie z po��czenia pod�cie�eki utworzy �aman� — zygzak.

Page 17: Tytuł oryginału: HTML5 Canvas Cookbook

Rozdzia� 1. • Wprowadzenie do operacji na �cie�kach i tekstach

27

Jak to zrobi�Aby narysowa� �aman�, nale�y wykona� nast�puj�ce operacje:

1. Zdefiniowa� kontekst 2d p�ótna:

window.onload = function(){ var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d");

var startX = 85; var startY = 70; var zigzagSpacing = 60;

2. Okre�li� styl �amanej i rozpocz�� rysowanie �cie�ki:

context.lineWidth = 10; context.strokeStyle = "#0096FF"; // kolor niebieskawy context.beginPath(); context.moveTo(startX, startY);

3. Narysowa� siedem ��cz�cych si� odcinków i wy�wietli� �cie�k�, wywo�uj�c metod�stroke():

// rysowanie siedmiu linii prostych for (var n = 0; n < 7; n++) { var x = startX + ((n + 1) * zigzagSpacing); var y; if (n % 2 == 0) { // je�li n jest parzyste y = startY + 100; } else { // je�li n jest nieparzyste y = startY; } context.lineTo(x, y); }

context.stroke();}

4. Umie�ci� element canvas w tre�ci dokumentu HTML:

<canvas id="myCanvas" width="600" height="250" style="border:1px solid black;"></canvas>

Jak to dzia�aAby narysowa� zygzak, nale�y po��czy� ze sob� kilka uko�nych linii, tworz�c w ten sposób �cie�k�.Mo�na to zrobi� przy u�yciu p�tli, w której w nieparzystych iteracjach b�dzie rysowana liniauko�na skierowana w dó� i w prawo, a w iteracjach parzystych — linia uko�na skierowana w gór�i w prawo.

Page 18: Tytuł oryginału: HTML5 Canvas Cookbook

HTML5 Canvas. Receptury

28

Najwa�niejszym aspektem jest tu metoda beginPath(). Jej wywo�anie deklaruje pocz�tek ry-sowania �cie�ki. Dzi�ki temu koniec ka�dej linii — pod�cie�ki — b�dzie definiowa� pocz�tekkolejnej pod�cie�ki. W razie pomini�cia wywo�ania tej metody trzeba by przy u�yciu metodymoveTo() mozolnie umieszcza� punkt kontekstu p�ótna przed rozpocz�ciem rysowania ka�dejlinii, by zapewni�, �e pocz�tek ka�dej kolejnej rysowanej linii b�dzie si� pokrywa� z kocempoprzedniej. Wywo�anie metody beginPath() jest tak�e konieczne w przypadku tworzeniakszta�tów, o czym mowa w nast�pnym rozdziale.

Style po��cze� liniiWarto zwróci� uwag� na to, �e po��czenia pomi�dzy kolejnymi segmentami rysowanego zyg-zaka s� spiczaste. Wynika to z tego, �e domy�lnym stylem po��cze linii w p�ótnach HTML5jest miter. Korzystaj�c z w�a�ciwo�ci lineJoin kontekstu p�ótna, mo�na tak�e zmieni� stylpo��cze na round (po��czenia zaokr�glone) lub bevel (po��czenia uko�ne).

Je�li ��czone segmenty linii s� stosunkowo cienkie i nie ��cz� si� pod ostrymi k�tami, to zauwa�e-nie jakichkolwiek ró�nic pomi�dzy poszczególnymi stylami po��cze mo�e by� trudne. Zazwy-czaj ró�nice pomi�dzy nimi staj� si� wyra�ne przy liniach, których grubo�� przekracza 5 pikseli,a k�ty pomi�dzy nimi s� stosunkowo niewielkie.

Rysowanie spiraliUwaga — ta receptura mo�e dzia�a� hipnotycznie. W tym przyk�adzie narysujemy spiral� —�cie�k� sk�adaj�c� si� z sekwencji krótkich linii.

Jak to zrobi�Aby narysowa� spiral� o okre�lonym punkcie centralnym, nale�y wykona� nast�puj�ce czynno�ci:

1. Zdefiniowa� kontekst 2d p�ótna i zainicjowa� parametry spirali:

window.onload = function(){ var canvas = document.getElementById("myCanvas");

Page 19: Tytuł oryginału: HTML5 Canvas Cookbook

Rozdzia� 1. • Wprowadzenie do operacji na �cie�kach i tekstach

29

var context = canvas.getContext("2d");

var radius = 0; var angle = 0;

2. Okre�li� styl rysowanej spirali:

context.lineWidth = 10; context.strokeStyle = "#0096FF"; // kolor niebieskawy context.beginPath(); context.moveTo(canvas.width / 2, canvas.height / 2);

3. Zatoczy� trzy pe�ne obroty wokó� punktu centralnego (przy czym na ka�dy obrótb�dzie przypada� po 50 segmentów linii). Ka�dy segment b�dzie rysowany przyu�yciu metody lineTo(), od koca poprzedniego segmentu do aktualnie wyznaczonegopunktu, przy czym za ka�dym razem promie b�dzie zwi�kszany o 0.75. Po zakoczeniutrzech pe�nych obrotów spirala zostanie wy�wietlona poprzez wywo�anie metodystroke():

for (var n = 0; n < 150; n++) { radius += 0.75; // pe�ny obrót b�dzie si� sk�ada� z 50 iteracji angle += (Math.PI * 2) / 50; var x = canvas.width / 2 + radius * Math.cos(angle); var y = canvas.height / 2 + radius * Math.sin(angle); context.lineTo(x, y); } context.stroke();};

4. Umie�ci� element canvas w tre�ci dokumentu HTML:

<canvas id="myCanvas" width="600" height="250" style="border:1px solid black;"></canvas>

Jak to dzia�aAby narysowa� w elemencie canvas spiral�, mo�emy umie�ci� kursor w jego �rodku, a nast�pnienarysowa� sekwencj� bardzo krótkich linii, zwi�kszaj�c przy tym k�t i odleg�o�� od punktu cen-tralnego, przy czym ka�da kolejna linia b�dzie si� zaczyna� w punkcie zakoczenia poprzedniej.Analizuj�c ten algorytm rysowania, mo�na wyobrazi� sobie, �e jeste�my dzieckiem, które stoi nachodniku z kawa�kiem kredy w r�ce. Pochylamy si�, przyk�adamy kred� do chodnika i zaczynamykr�ci� si� w ko�o (nie za szybko, chyba �e chcemy, by si� nam zakr�ci�o w g�owie). Podczas kr�-cenia si� odsuwamy kred� coraz dalej od siebie. Po kilku obrotach oka�e si�, �e narysowali�my�liczn�, ma�� spiral�.

Page 20: Tytuł oryginału: HTML5 Canvas Cookbook

HTML5 Canvas. Receptury

30

Praca z tekstemNiemal wszystkie aplikacje korzystaj� z wy�wietlania tekstów, by efektywnie przekazywa� infor-macje u�ytkownikom. Ta receptura pokazuje, jak wy�wietli� w elemencie canvas optymistycznepowitanie.

Jak to zrobi�Aby wy�wietli� na p�ótnie tekst, nale�y wykona� nast�puj�ce czynno�ci:

1. Zdefiniowa� kontekst 2d p�ótna i okre�li� styl prezentowanego tekstu:

window.onload = function(){ var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d");

context.font = "40pt Calibri"; context.fillStyle = "black";

2. Wyrówna� tekst w poziomie i w pionie, a nast�pnie go wy�wietli�:

// wy�rodkowanie tekstu w poziomie context.textAlign = "center"; // wy�rodkowanie tekstu w pionie context.textBaseline = "middle"; context.fillText("Witaj, �wiecie!", canvas.width / 2, 120);};

3. Umie�ci� element canvas w tre�ci dokumentu HTML:

<canvas id="myCanvas" width="600" height="250" style="border:1px solid black;"></canvas>

Jak to dzia�aGdy wy�wietlamy tekst w elemencie canvas, mo�emy zdefiniowa� styl oraz wielko�� czcionki(w�a�ciwo�� font), kolor czcionki (w�a�ciwo�� fillStyle), wyrównanie tekstu w poziomie (w�a-�ciwo�� textAlign) i w pionie (w�a�ciwo�� textBaseline). W�a�ciwo�ci textAlign mo�na przypi-sa� warto�ci left, center b�d� right, a w�a�ciwo�ci textBaseline warto�ci top, hanging, middle,alphabetic, ideographic lub bottom. Domy�ln� warto�ci� w�a�ciwo�ci textAlign jest left, nato-miast w�a�ciwo�ci textBaseline — alphabetic.

Page 21: Tytuł oryginału: HTML5 Canvas Cookbook

Rozdzia� 1. • Wprowadzenie do operacji na �cie�kach i tekstach

31

Dodatkowe informacjeOprócz metody fillText() API elementów canvas udost�pnia metod� strokeText():

context.strokeText("Witaj, �wiecie!", x, y);

Metoda ta nie wy�wietla samego tekstu, lecz wype�nia zajmowany przez niego obszar okre�lonymkolorem. Aby wy�wietli� tekst i jednocze�nie wype�ni� kolorem zajmowany przez niego obszar, na-le�y wywo�a� zarówno metod� fillText(), jak i strokeText(). Aby tekst mia� odpowiedni� wielko��,w pierwszej kolejno�ci nale�y wywo�a� metod� fillText(), a dopiero po niej metod� strokeText().

Patrz tak�e� „Rysowanie trójwymiarowego tekstu z cieniem”.� „Tworzenie odbicia lustrzanego” w rozdziale 4.� „Rysowanie prostego logo i losowe okre�lanie jego po�o�enia, obrotu oraz skali”

w rozdziale 4.

Rysowanie trójwymiarowego tekstuz cieniemOsoby, które uwa�aj�, �e zwyczajne, dwuwymiarowe teksty nie s� szczególnie atrakcyjne, zainte-resuj� si� zapewne rysowaniem tekstów trójwymiarowych. Cho� API elementów canvas niezapewnia bezpo�rednio mo�liwo�ci rysowania takich tekstów, to jednak korzystaj�c z tego API,stosunkowo �atwo mo�na samodzielnie utworzy� funkcj� draw3dText().

Jak to zrobi�Aby narysowa� trójwymiarowy tekst, nale�y wykona� nast�puj�ce czynno�ci:

1. Zdefiniowa� kontekst 2d p�ótna i okre�li� styl prezentowanego tekstu:

window.onload = function(){ var canvas = document.getElementById("myCanvas");

Page 22: Tytuł oryginału: HTML5 Canvas Cookbook

HTML5 Canvas. Receptury

32

var context = canvas.getContext("2d");

context.font = "40pt Calibri"; context.fillStyle = "black";

2. Okre�li� wyrównanie i wy�wietli� trójwymiarowy tekst:

// wy�rodkowanie tekstu w poziomie context.textAlign = "center"; // wy�rodkowanie tekstu w pionie context.textBaseline = "middle"; draw3dText(context, "Witaj, �wiecie 3D!", canvas.width / 2, 120, 5);};

3. Zdefiniowa� funkcj� draw3dText(), która b�dzie tworzy� kilka warstw tekstu i dodawa�do niego cie:

function draw3dText(context, text, x, y, textDepth){ var n;

// rysowanie dolnych warstw for (n = 0; n < textDepth; n++) { context.fillText(text, x - n, y - n); }

// rysowanie górnej warstwy z cieniem rzucanym na // warstwy ni�sze context.fillStyle = "#5E97FF"; context.shadowColor = "black"; context.shadowBlur = 10; context.shadowOffsetX = textDepth + 2; context.shadowOffsetY = textDepth + 2; context.fillText(text, x - n, y - n);}

4. Umie�ci� element canvas w tre�ci dokumentu HTML:

<canvas id="myCanvas" width="600" height="250" style="border:1px solid black;"></canvas>

Jak to dzia�aAby narysowa� trójwymiarowy tekst w elemencie canvas, mo�na wy�wietli� kilka nieznacznieprzesuni�tych wzgl�dem siebie warstw zawieraj�cych ten sam tekst, tworz�c w ten sposób imitacj�g��bi. W tej recepturze g��boko�� tekstu wynosi 5, co oznacza, �e nasza funkcja draw3dText()pi�� razy wy�wietli tekst Witaj, �wiecie 3D!, za ka�dym razem nieznacznie go przesuwaj�c.Te dodatkowe warstwy tekstu zostan� wy�wietlone na czarno, by zapewni� imitacj� g��bi.

Page 23: Tytuł oryginału: HTML5 Canvas Cookbook

Rozdzia� 1. • Wprowadzenie do operacji na �cie�kach i tekstach

33

Nast�pnie dodamy kolorow�, wierzchni� warstw�. Ostatni� operacj� jest dodanie rozmytego cieniaponi�ej tekstu, co mo�na zrobi� poprzez przypisanie odpowiednich warto�ci w�a�ciwo�ciomshadowColor, shadowBlur, shadowOffsetX i shadowOffsetY kontekstu p�ótna. W�a�ciwo�ci te mo�nastosowa� nie tylko przy wy�wietlaniu tekstów, lecz tak�e pod�cie�ek, �cie�ek i kszta�tów, o czymb�dzie jeszcze mowa w dalszej cz��ci ksi��ki.

Wyzwalanie pot�gi fraktali— rysowanie nawiedzonego drzewaCzym s� fraktale? Mo�na powiedzie�, �e s� one po��czeniem matematyki ze sztuk�. Znajdziemyje we wszelkiego rodzaju wzorcach wyst�puj�cych w naturze. Pod wzgl�dem algorytmicznymfraktale s� równaniami wykorzystuj�cymi rekurencj�. W tej recepturze narysujemy naturalniewygl�daj�ce drzewo, zaczynaj�ce si� od pnia rozdzielaj�cego si� na dwa konary, z których ka�dynast�pnie rozdziela si� na dwie ga��zie. Po dwunastu takich powtórzeniach uzyskamy roz�o�yste,pozornie chaotyczne drzewo z mas� konarów i ga��zek.

Jak to zrobi�Oto czynno�ci, jakie nale�y wykona�, aby narysowa� drzewo, korzystaj�c z fraktali:

1. Utworzy� rekurencyjn� funkcj�, która b�dzie rysowa� jedn� ga���, rozdzielaj�c� si�na dwie mniejsze ga��zie; nast�pnie funkcja b�dzie wywo�ywa� rekurencyjnie sam�siebie, by narysowa� te dwie ga��zie, zaczynaj�c od ich punktów kocowych:

Page 24: Tytuł oryginału: HTML5 Canvas Cookbook

HTML5 Canvas. Receptury

34

function drawBranches(context, startX, startY, trunkWidth, level){ if (level < 12) { var changeX = 100 / (level + 1); var changeY = 200 / (level + 1);

var topRightX = startX + Math.random() * changeX; var topRightY = startY - Math.random() * changeY;

var topLeftX = startX - Math.random() * changeX; var topLeftY = startY - Math.random() * changeY;

// rysowanie prawej ga��zi context.beginPath(); context.moveTo(startX + trunkWidth / 4, startY); context.quadraticCurveTo(startX + trunkWidth / �4, startY - trunkWidth, topRightX, topRightY); context.lineWidth = trunkWidth; context.lineCap = "round"; context.stroke();

// rysowanie lewej ga��zi context.beginPath(); context.moveTo(startX - trunkWidth / 4, startY); context.quadraticCurveTo(startX - trunkWidth / 4, startY - trunkWidth, topLeftX, topLeftY); context.lineWidth = trunkWidth; context.lineCap = "round"; context.stroke();

drawBranches(context, topRightX, topRightY, trunkWidth * 0.7, level + 1); drawBranches(context, topLeftX, topLeftY, trunkWidth * 0.7, level + 1); }}

2. Zainicjowa� kontekst p�ótna i rozpocz�� rysowanie fraktala drzewa poprzezwywo�anie funkcji drawBranches():

window.onload = function(){ canvas = document.getElementById("myCanvas"); context = canvas.getContext("2d");

drawBranches(context, canvas.width / 2, canvas.height, 50, 0);};

3. Umie�ci� element canvas w tre�ci dokumentu HTML:

<canvas id="myCanvas" width="600" height="250" style="border:1px solid black;"></canvas>

Page 25: Tytuł oryginału: HTML5 Canvas Cookbook

Rozdzia� 1. • Wprowadzenie do operacji na �cie�kach i tekstach

35

Jak to dzia�aAby narysowa� drzewo przy u�yciu fraktala, nale�y przygotowa� rekurencyjn� funkcj�, którazdefiniuje matematyczn� natur� drzewa. Je�li po�wi�cimy chwil� na przestudiowanie wygl�-du drzew (gdy to zrobimy, oka�e si�, �e s� naprawd� pi�kne), zauwa�ymy, �e wszystkie ich ga��-zie rozdzielaj� si� na mniejsze ga��zki. Oznacza to, �e nasza rekurencyjna funkcja powinna ryso-wa� jedn� ga���, która rozdziela si�, daj�c pocz�tek dwóm kolejnym ga��ziom, a nast�pnierekurencyjnie wywo�a� sam� siebie, by narysowa� te dwie ga��zie wraz z kolejnymi, jeszczemniejszymi ga��ziami.

Teraz, kiedy ju� wiemy, jak ma dzia�a� nasz fraktal, mo�emy go zaimplementowa�, korzystaj�cz API elementów canvas. Najprostszym sposobem utworzenia ga��zi rozdzielaj�cej si� na dwiekolejne jest narysowanie dwóch krzywych kwadratowych, wygi�tych w przeciwnych kierunkach.

Gdyby�my zastosowali dla ka�dej iteracji dok�adnie t� sam� procedur�, to narysowane drzewoby�oby idealnie symetryczne i ma�o interesuj�ce. Aby wygl�da�o ono bardziej naturalnie, po-�o�enie punktów kocowych poszczególnych ga��zi b�dzie modyfikowane o warto�ci losowe.

Dodatkowe informacjeNajciekawszym aspektem tej receptury jest to, �e ka�de narysowane drzewo b�dzie inne. Je�liCzytelnik zaimplementuje powy�szy przyk�ad i b�dzie go wielokrotnie wy�wietla� w przegl�darce,to ka�de z wygenerowanych drzew b�dzie unikalne. Mo�na tak�e spróbowa� zmodyfikowa�algorytm rysuj�cy ga��zie, by tworzy� ró�ne rodzaje drzew albo nawet dorysowywa� li�cie nakocach najmniejszych ga��zek.

Doskona�ymi przyk�adami fraktali w naturze s� muszle, p�atki �niegu, pióra, ro�liny, kryszta�y,góry, rzeki i b�yskawice.

Page 26: Tytuł oryginału: HTML5 Canvas Cookbook

HTML5 Canvas. Receptury

36

Page 27: Tytuł oryginału: HTML5 Canvas Cookbook

Skorowidz

AActor, 238

attack(), 239damage(), 242draw(), 240, 242fade(), 240getCenter(), 242isFacingRight(), 239jump(), 240moveLeft(), 240moveRight(), 239sterowanie postaciami, 242stop(), 239tworzenie, 238updateSpriteMotion(), 240,

242updateSpriteSeqNum(), 241,

242zarz�dzanie sprite’ami, 242

animacja, 124Animation, 124, 127

animationLoop(), 127clear(), 126, 128getCanvas(), 125getContext(), 125getFps(), 127getTime(), 128getTimeInterval(), 126, 128requestAnimationFrame(),

127requestAnimFrame(), 127setDrawStage(), 126start(), 126, 128, 130stop(), 126, 128, 130tworzenie, 125

FPS, 124, 161wy�wietlanie, 157

Gear, 141draw(), 141, 145w�a�ciwo�ci, 144

ko�a z�bate, 140draw(), 141, 145start(), 145

oscylacje, 133arc(), 137rect(), 134ruchome wahad�o, 137ruchomy b�belek, 135stage(), 134start(), 134, 137, 140

przyspieszenie, 130, 132stop(), 132

requestAnimationFrame(), 124ruch cz�steczki, 149

start(), 152ruch liniowy, 128ruchome mikroby, 153

zwi�kszanie obci��enia, 162zegar, 145

arc(), 148fillText(), 148shadowOffsetX, 148shadowOffsetY, 148start(), 148stroke(), 148translate(), 148

Animation, 124, 127animationLoop(), 127, 271API, 11, 17

copy, 52destination-atop, 52

destination-in, 52destination-out, 52destination-over, 52lighter, 52source-atop, 52source-in, 52source-out, 52source-over, 52xor, 52

arkusze sprite’ów, 232, 233

BBarChart, 210

drawBars(), 212, 215drawGridlines(), 213drawXAxis(), 214drawXLabels(), 212drawYAxis(), 214drawYValues(), 212getLabelAreaHeight(), 211getLongestValueWidth(), 211tworzenie, 210

Ccanvas, 11, 13

API, 11, 17addColorStop(), 44arc(), 21, 41arcTo(), 22beginPath(), 28, 44bezierCurveTo(), 25, 122closePath(), 44createLinearGradient(),

44, 59

Page 28: Tytuł oryginału: HTML5 Canvas Cookbook

Skorowidz

318

canvasAPI

createPattern(), 45createRadialGradient(), 44document.getElement�ById(), 19

draw(), 62draw3dText(), 31drawBranches(), 34drawImage(), 77, 79, 82,

119drawTriangle(), 44Events, 165fill(), 39, 41fillRect(), 39fillText(), 31getContext(), 19getImageData(), 85, 87globalAlpha, 50globalCompositeOperation,

56isPointInPath(), 171krzywe Béziera, 25lineTo(), 19moveTo(), 19, 44obraz, 75operacje z�o�one, 52procedury obs�ugi

zdarze, 165putImageData(), 89quadraticCurveTo(), 24rect(), 39request.responseText, 98requestAnimFrame(), 84,

91restore(), 50, 115rotate(), 105, 119save(), 50, 115scale(), 107, 110, 117setInterval(), 102setTransform(), 111stos stanu kontekstu, 48stroke(), 20strokeRect(), 39strokeText(), 31style wype�nie, 42toDataURL(), 94transform(), 113translate(), 119

WebGL, 268atrybuty, 14

height, 14id, 14width, 14

bezpieczestwo danych, 313drawImage(), 313fillStyle, 314fillText(), 314flaga prawid�owego �ród�a,

313getImageData(), 314measureText(), 314SECURITY_ERR, 314strokeStyle, 314strokeText(), 314toDataURL(), 314

kontekst 2d, 14kontekst 3d, 267podstawowy szablon, 14rodzaje kontekstów, 310udost�pnianie tre�ci

zast�pczej, 309getContext(), 309isCanvasSupported(), 310

WebGL, 267w�asna gra, 229

Actor, 238aktualizacja danych, 251aktualizacja poziomu �ycia

bohatera, 245arkusz sprite’ów bohatera,

233arkusz sprite’ów

przeciwników, 233Controller, 246HealthBar, 245implementowanie silnika

gry, 246Level, 243mapa obszarów, 236Model, 251najwa�niejsze cechy, 230obrazy poziomów, 234obs�uga bohatera, 238stany gry, 251, 260, 262sterowanie postaciami, 242tworzenie dokumentu

HTML, 265

uruchamianie, 265View, 260wy�wietlanie poziomu, 243zarz�dzanie przebiegiem,

251Controller, 246, 307

addKeyboardListeners(),248, 251

handleKeyDown(), 249handleKeyUp(), 248initGame(), 248, 250loadImages(), 248resetGame(), 250

copy, 52

Ddestination-atop, 52destination-in, 52destination-out, 52destination-over, 52

EEvents, 165

addRegionEventListener(),169

beginRegion(), 171clear(), 166closeRegion(), 172getCanvas(), 166getCanvasPos(), 166getContext(), 166getMousePos(), 168getTouchPos(), 168listen(), 167, 172procedury obs�ugi zdarze, 165reset(), 166setDrawStage(), 166, 171setMousePos(), 168setTouchPos(), 169tworzenie, 165wspó�rz�dne wska�nika

myszy, 172getMousePos(), 174

Page 29: Tytuł oryginału: HTML5 Canvas Cookbook

Skorowidz

319

Ffont, 30FPS, 157, 161

wy�wietlanie, 260funkcje

addPoint(), 197applyPhysics(), 149, 152draw3dText(), 31, 32drawBranches(), 34drawClub(), 65drawDiamond(), 66drawFps(), 158, 161drawFrame(), 83, 90drawHeart(), 64drawImage(), 189drawImages(), 183, 184, 193drawLogo(), 120, 122drawMagnifier(), 195drawMicrobes, 155drawMicrobes(), 157, 160drawPath(), 197drawSpade(), 63, 81drawStage(), 282, 285, 288, 293drawTriangle(), 44focusImage(), 99getCanvasImg(), 198getContextSupport(), 310getFrame(), 126getRandomAngle(), 121getRandomColor(), 153, 158getRandomSize(), 121getRandomTheta(), 153, 158getRandomX(), 120getRandomY(), 121imageMagnifier(), 191initBuffers(), 282, 284, 286,

290isAnimating(), 126loadCanvas(), 97loadImages(), 184loadTexture(), 294requestAnimationFrame(), 125stage(), 126, 130, 135, 138,

140, 146, 148, 152, 156,157, 161, 166, 171, 175,179, 183, 188, 194, 200, 283

updateColorSequence(), 198updateMicrobes(), 153, 157,

158

writeMessage(), 173, 179,182, 185, 188

GGear, 141, 144globalAlpha, 48, 50globalCompositeOperation, 56Graph, 216

drawEquation(), 219, 220drawXAxis(), 217drawYAxis(), 218parametry, 220transformContext(), 219tworzenie, 216

HHealthBar, 245

draw(), 246setHealth(), 245

HTML5, 11animacje, 315canvas, 11, 13

API, 17efekty przej��, 315formaty wideo, 82fraktale, 33

drawBranches(), 34konwersja obrazu na skal�

szaro�ci, 92kopiowanie fragmentów

obrazu, 80drawImage(), 82

krzywa Béziera, 25bezierCurveTo(), 25��czenie, 45punkt kontekstu, 25punkt kocowy, 25punkty kontrolne, 25

niestandardoweprzesuni�cie, 110transform(), 111

obracanie obrazu, 118drawImage(), 119rotate(), 119translate(), 119

odwracanie kolorów obrazu,88putImageData(), 89

odwracanie koloróww klipach wideo, 90getImageData(), 91requestAnimFrame(), 91

operacje z�o�one, 51p�ótno, 18

closePath(), 44createLinearGradient(), 44createPattern(), 45createRadialGradient(), 44fillStyle, 39fps, 100globalCompositeOperation,

56kontekst 2d, 18lineCap, 20lineJoin, 28lineWidth, 19lustrzane odbicie

kontekstu, 109obrót kontekstu, 105, 118pochylanie kontekstu, 112przesuwanie kontekstu, 104rotate(), 105scale(), 107, 110shadowBlur, 33shadowColor, 33shadowOffsetX, 33shadowOffsetY, 33skalowanie kontekstu, 107stos stanu, 49strokeStyle, 19

pobieranie danych obrazu, 86getImageData(), 87

przekszta�canie okr�gu naowal, 116scale(), 117translate(), 117

przekszta�ceniaz wykorzystaniemstosu stanu, 113restore(), 115save(), 115

rysowanie krzywejkwadratowej, 23punkt kontekstu, 24punkt kontrolny, 24punkt kocowy, 24quadraticCurveTo(), 24

Page 30: Tytuł oryginału: HTML5 Canvas Cookbook

Skorowidz

320

HTML5rysowanie linii, 18

lineCap, 20lineTo(), 19lineWidth, 19moveTo(), 19stroke(), 20strokeStyle, 19

rysowanie logo, 120bezierCurveTo(), 122drawLogo(), 122

rysowanie �uku, 21arc(), 21arcTo(), 22

rysowanie okr�gu, 40arc(), 41fill(), 41

rysowanie prostok�ta, 38fill(), 39fillRect(), 39rect(), 39strokeRect(), 39

rysowanie przezroczystegoko�a, 47globalAlpha, 48

rysowanie spirali, 28lineTo(), 29stroke(), 29

rysowanie symboli koloróww talii kart, 63drawClub(), 65drawDiamond(), 66drawHeart(), 64drawSpade(), 63

rysowanie trójk�ta, 42beginPath(), 44closePath(), 44drawTriangle(), 44lineTo(), 44moveTo(), 44

rysowanie trójwymiarowegotekstu, 31draw3dText(), 32

rysowanie zygzaków, 26beginPath(), 28lineJoin, 28moveTo(), 28

stosowanie warto�cilosowych, 60

tworzenie dokumentu, 265

URL, 93getDataURL(), 97konwersja obrazu, 93loadCanvas(), 98request.responseText, 98toDataURL(), 94wy�wietlanie, 97zapisywanie obrazu, 96

wklejanie fragmentówobrazu, 80drawImage(), 82

wycinanie fragmentuobrazu, 78drawImage(), 79

wykorzystanie p�tli, 56wyostrzanie obrazu, 99

setInterval(), 102wy�wietlanie klipów wideo, 83

drawFrame(), 83drawImage(), 83requestAnimFrame(), 84

wy�wietlanie obrazu, 76drawImage(), 77newImage(), 77onload, 77

wy�wietlanie tekstu, 30fillStyle, 30fillText(), 31font, 30strokeText(), 31textAlign, 30textBaseline, 30

Kklasy

Actor, 238Animation, 125, 127BarChart, 210Controller, 246, 307Events, 165Flower, 62Gear, 141, 144Graph, 216HealthBar, 245Level, 243LineChart, 222Model, 251, 307PieChart, 204

View, 260, 307WebGL, 268

kontekst 2d, 14

LLevel, 243

draw(), 243getZoneInfo(), 244setBoundsData(), 243, 244

lighter, 52lineCap, 20LineChart, 222

drawLine(), 224, 227drawXAxis(), 223drawYAxis(), 224getLongestValueWidth(), 223transformContext(), 225tworzenie, 222w�a�ciwo�ci, 227

lineJoin, 28lineWidth, 19, 39

Mmapy obszarów, 234

alternatywy, 237inBounds, 245levitating, 245tworzenie, 236

metodyaddColorStop(), 44, 47addKeyboardListeners(),

248, 251addRegionEventListener(),

169, 184, 187animationLoop(), 127, 271arc(), 21, 41, 137, 148, 208arcTo(), 22attacheListeners(), 299attack(), 239beginPath(), 28, 44beginRegion(), 169, 171, 175,

179, 184, 187bezierCurveTo(), 122clear(), 126, 128, 166, 270closePath(), 44closeRegion(), 169, 172,

176, 179createArrayBuffer(), 277

Page 31: Tytuł oryginału: HTML5 Canvas Cookbook

Skorowidz

321

createElementArrayBuffer(),277

createLinearGradient(), 44, 59createPattern(), 45createRadialGradient, 46createRadialGradient(), 44damage(), 242document.getElementById(),

14, 19draw(), 62, 141, 145, 240,

242, 243, 246drawArrays(), 279, 282, 283,

284drawBadGuys(), 261drawBars(), 212, 215drawCeiling(), 304drawCrates(), 305drawElements(), 279, 288,

289, 293drawEquation(), 220drawFloor(), 304drawFps(), 261drawGridlines(), 213drawImage(), 77, 79, 82,

119, 313drawLegend(), 208drawLine(), 224, 227drawPieBorder(), 205, 208drawScreen(), 262drawSlices(), 208drawWalls(), 305drawXAxis(), 214, 217, 223drawXLabels(), 212drawYAxis(), 214, 218, 224drawYValues(), 212enableLighting(), 279, 295fade(), 240fill(), 39, 41, 47fillRect(), 39fillText(), 31, 148, 314getCanvas(), 166getCenter(), 242getCnavasPos(), 166getContext(), 19, 125, 166, 309getDataURL(), 97getFps(), 127, 271getFragmentShaderGLSL(),

272getFrame(), 270

getImageData(), 85, 87, 91,314

getLabelAreaHeight(), 211getLegendWidth(), 205getLongestValueWidth(),

211, 223getMousePos(), 168, 174, 298getTime(), 128, 271getTimeInterval(), 126, 128,

271getTotalValue(), 206getTouchPos(), 168getVertexShaderGLSL(), 273getZoneInfo(), 244handleKeyDown(), 249, 298handleKeyUp(), 248, 299handleMouseDown(), 298handleMuseMove(), 298identity(), 275, 283init(), 294initBadGuys(), 255initBuffers(), 303initColorShader(), 276initCratePosition(), 301initCubeBuffers(), 301initFloorBuffers(), 302initGame(), 248, 250initHealthBar(), 254initHero(), 254initLevel(), 254initLightingShader(), 277initNormalShader(), 276initPositionShader(), 276initShaders(), 274initTexture(), 277initTextureShader(), 276initWallBuffers(), 303isAnimating(), 270isCanvasSupported(), 310isFacingRight(), 239isPointInPath(), 171jump(), 240lineTo(), 19, 29listen(), 167, 172loadImages(), 248loadTextures(), 297measureText(), 314moveBadGuys(), 256, 260moveLeft(), 240

moveRight(), 239moveTo(), 19, 28, 44nearby(), 259perspective(), 275, 283pushColorBuffer(), 278pushIndexBuffer(), 278pushNormalBuffer(), 278pushPositionBuffer(), 278, 283pushTextureBuffer(), 278putImageData(), 89rect(), 39, 134removeDefeatedBadGuys(),

252requestAnimationFrame(),

124, 127, 269requestAnimFrame(), 84, 91,

127, 269reset(), 166resetGame(), 250restore(), 50, 115, 272rotate(), 105, 119, 276, 285save(), 50, 115, 272scale(), 107, 110, 117setAmbientLighting(), 279,

295setBoundsData(), 243, 244setDirectionalLighting(), 280,

295setDrawStage(), 126, 166,

171, 270setHealth(), 245setInterval(), 102setMatrixUniforms(), 279setMousePos(), 168setShaderProgram(), 275, 295setStage(), 294setTouchPos(), 169setTransform(), 111stage(), 134, 262, 306start(), 126, 128, 130, 134,

137, 140, 145, 148, 152, 285startAnimation(), 270stop(), 126, 128, 130, 132, 239stopAnimation(), 271stroke(), 20, 27, 29, 148strokeRect(), 39strokeText(), 31, 314toDataURL(), 94, 201, 314

Page 32: Tytuł oryginału: HTML5 Canvas Cookbook

Skorowidz

322

metodytransform(), 111, 113transformContext(), 219, 225translate(), 117, 119, 148, 276updateActor(), 258updateActorVY(), 258updateActorX(), 259updateActorY(), 258updateBadGuys(), 252updateCameraPos(), 303updateHeroCanvasPos(), 257updateLevel(), 257updateSpriteMotion(), 240, 242updateSpriteSeqNum(), 241,

242updateStage(), 253writeMessage(), 175

Model, 251, 307initBadGuys(), 255initHealthBar(), 254initHero(), 254initLevel(), 254moveBadGuys(), 256, 260nearby(), 259removeDefeatedBadGuys(),

252updateActor(), 258updateActorVY(), 258updateActorX(), 259updateActorY(), 258updateBadGuys(), 252updateHeroCanvasPos(), 257updateLevel(), 257updateStage(), 253zadania, 260

mousedown, 176, 187, 190, 199,201

mousemove, 176, 187mouseout, 176, 187, 190mouseover, 176, 187, 190mouseup, 176, 187, 190, 200, 201

Oobraz, 75

animacja, 124konwersja na skal� szaro�ci, 92kopiowanie fragmentu, 80

drawImage(), 82

lustrzane odbicie kontekstup�ótna, 109scale(), 110

niestandardoweprzesuni�cie, 110transform(), 111

obracanie, 118drawImage(), 119rotate(), 119translate(), 119

obrót kontekstu p�ótna, 105rotate(), 105

odwracanie kolorów, 88putImageData(), 89

pobieranie danych, 86getImageData(), 87

pochylanie kontekstu p�ótna,112transform(), 113

powi�kszanie fragmentu,190, 195

procedury obs�ugi zdarze,181beginRegion(), 184mousedown, 199, 201mouseup, 200, 201

prosta aplikacja graficzna, 196isMouseDown, 198mousedown, 199, 201mouseup, 200, 201podstawowe cechy, 201

przekszta�canie okr�gu naowal, 116scale(), 117translate(), 117

przekszta�ceniaz wykorzystaniemstosu stanu, 113restore(), 115save(), 115

przesuwanie kontekstup�ótna, 104

przycinanie, 77drawImage(), 79

RGB, 85konwersja na skal�

szaro�ci, 93rysowanie logo, 120

bezierCurveTo(), 122

drawLogo(), 122skalowanie kontekstu p�ótna,

107przekszta�canie okr�gu

na owal, 116scale(), 107

technika przeci�gnij i upu��,188mousedown, 190mouseout, 190mouseover, 190mouseup, 190

URL, 93getDataURL(), 97konwersja, 93loadCanvas(), 98request.responseText, 98toDataURL(), 94wy�wietlanie, 97zapisywanie, 96

wklejanie fragmentu, 80drawImage(), 82

wyostrzanie, 99setInterval(), 102

wy�wietlanie, 76drawImage(), 77new Image(), 77onload, 77

obrazy poziomów, 234alternatywy, 237

uk�ad mozaiki, 238wczytywanie z

opó�nieniem, 237tworzenie, 234wy�wietlanie, 243

onload, 77

PPieChart, 204

drawLegend(), 207, 208drawPieBorder(), 205, 208drawSlices(), 206, 208getLegendWidth(), 205getTotalValue(), 206tworzenie, 204

procedury obs�ugi zdarze, 165dotyk, 178

beginRegion(), 179

Page 33: Tytuł oryginału: HTML5 Canvas Cookbook

Skorowidz

323

closeRegion(), 179touchend, 180, 181touchmove, 179touchstart, 180

isPointInPath(), 171mousedown, 176, 187, 190,

199, 201mousemove, 174, 176, 187mouseout, 174, 176, 187, 190mouseover, 176, 187, 190mouseup, 176, 187, 190,

200, 201mysz, 174

beginRegion(), 175closeRegion(), 176mousedown, 176mousemove, 176mouseout, 176mouseover, 176mouseup, 176writeMessage(), 175

obraz, 181addRegionEventListener(),

184beginRegion(), 184

powi�kszanie fragmentugrafiki, 190, 195

technika przeci�gnij i upu��,185, 188addRegionEventListener(),

187beginRegion(), 187fazy, 187mousedown, 187, 190mousemove, 187mouseout, 187, 190mouseover, 187, 190mouseup, 187, 190

touchend, 180, 181touchmove, 179touchstart, 180, 181

Rreceptury

animacjako�a z�bate, 140zegar, 145

klipy wideoodwracanie kolorów, 89wy�wietlanie, 82

kontekst p�ótnaobrót, 105przesuwanie, 104pochylanie, 112skalowanie, 107

niestandardoweprzesuni�cie, 110

obrazkonwersja kolorów

rysunku na skal�szaro�ci, 91

kopiowanie fragmentów, 80obracanie, 118odwracanie kolorów, 87pobieranie danych, 84powi�kszanie fragmentu,

190przycinanie, 77wyostrzanie obrazka

o powi�kszonychpikselach, 99

wklejanie fragmentów, 80operacje z�o�one, 51procedury obs�ugi zdarze

do��czanie do obrazków, 181dotyku, 178myszy, 174

przeci�gnij i upu��kszta�t, 185obrazek, 188

przekszta�ceniaokr�g na owal, 116rysunek na posta� danych

URL, 93wykorzystanie stosu stanu,

113ruchome wahad�o, 137rysowanie

chmurka, 45ko�o z�bate, 56krzywa Béziera, 25krzywa kwadratowa, 23linia, 18��ka kwiatów, 59�uk, 21nawiedzone drzewo, 33

odrzutowiec, 67okr�g, 40proste logo, 119prostok�t, 38przezroczyste kszta�ty, 47spirala, 28trójk�t, 281trójwymiarowy tekst

z cieniem, 31zygzak, 26

style wype�nienia, 42symulacja fizyki cz�stek, 149tekstury i o�wietlenie, 290tworzenie

aplikacja graficzna, 196funkcja rysuj�ca

niestandardowekszta�ty, 62

mikroskopijne �yj�tka, 153obracaj�cy si� sze�cian,

286odbicie lustrzane, 109oscylacje, 133przyspieszenie, 130ruch liniowy, 128trójwymiarowy �wiat, 296w�asne kszta�ty, 42

tworzenie klasyActor, 238Animation, 124Controller, 246Events, 164HealthBar, 245Level, 243Model, 251upraszczaj�ca korzystanie

z API WebGL, 268View, 260

tworzenie wykresuko�owy, 204liniowy, 221s�upkowy, 209wizualizacja równa, 216

wy�wietlanieklipów wideo, 82obrazu, 76tekstu, 30

wspó�rz�dne myszy, 172rect(), 39, 134

Page 34: Tytuł oryginału: HTML5 Canvas Cookbook

Skorowidz

324

removeDefeatedBadGuys(), 252request.responseText, 98requestAnimationFrame(), 125,

127, 269requestAnimFrame(), 84, 91,

127, 269reset(), 166resetGame(), 250restore(), 50, 115, 272RGB, 85

konwersja na skal� szaro�ci, 93rotate(), 105, 119, 276, 285rysowanie, 17

chmurka, 45addColorStop(), 47createRadialGradient, 46fill(), 47

drzewo, 33drawBranches(), 34

ko�o z�bate, 56createLinearGradient(), 59

krzywa Béziera, 25bezierCurveTo(), 25��czenie, 45punkt kontekstu, 25punkt kocowy, 25punkty kontrolne, 25

krzywa kwadratowa, 23punkt kontekstu, 24punkt kontrolny, 24punkt kocowy, 24quadraticCurveTo(), 24

kwiaty, 60draw(), 62

linia, 18lineCap, 20lineTo(), 19lineWidth, 19moveTo(), 19stroke(), 20strokeStyle, 19

logo, 120bezierCurveTo(), 122drawLogo(), 122

�uk, 21arc(), 21arcTo(), 22

odrzutowiec, 68

okr�g, 40arc(), 41fill(), 41

prostok�t, 38fill(), 39fillRect(), 39rect(), 39strokeRect(), 39

przezroczyste ko�o, 47globalAlpha, 48

spirala, 28lineTo(), 29stroke(), 29

style wype�nie, 42gradienty ko�owe, 44gradienty liniowe, 44kolory gradientu, 44wzorce, 45

symbole kolorów w talii kart,63drawClub(), 65drawDiamond(), 66drawHeart(), 64drawSpade(), 63

trójk�t, 42beginPath(), 44closePath(), 44drawTriangle(), 44lineTo(), 44moveTo(), 44

trójwymiarowy tekst, 31draw3dText(), 32

zygzak, 26beginPath(), 28lineJoin, 28moveTo(), 28

SshadowBlur, 33shadowColor, 33shadowOffsetX, 33, 148shadowOffsetY, 33, 148source-atop, 52source-in, 52source-out, 52source-over, 52stos stanu kontekstu, 113

odtwarzanie przekszta�ce, 114restore(), 115

zapisywanie przekszta�ce, 114save(), 115

stos stanu p�ótna, 49dodanie na stos, 49odczyt wierzcho�ka, 49pobranie ze stosu, 49przywracanie stanu

kontekstu, 50restore(), 50

struktura danych, 49zapisanie stanu kontekstu, 50

save(), 50

Ttekst, 30

rysowanie trójwymiarowegotekstu, 31draw3dText(), 32

wy�wietlanie w elemenciecanvas, 30fillStyle, 30fillText(), 31font, 30strokeText(), 31textAlign, 30textBaseline, 30

textAlign, 30textBaseline, 30touchend, 180, 181touchmove, 179, 181touchstart, 180, 181

VView, 260, 307

drawBadGuys(), 261drawFps(), 261drawScreen(), 261, 262stage(), 262

WWebGL, 267, 268

animationLoop(), 271clear(), 270createArrayBuffer(), 277createElementArrayBuffer(),

277

Page 35: Tytuł oryginału: HTML5 Canvas Cookbook

Skorowidz

325

dodawanie teksturi o�wietlenia, 290bufor normalnych, 295bufor tekstur, 295drawElements(), 293enableLighting(), 295init(), 294o�wietlenie kierunkowe, 295o�wietlenie otoczenia, 295setAmbientLighting(), 295setDirectionalLighting(),

295setShaderProgram(), 295setStage(), 294

drawArrays(), 279drawElements(), 279enableLighting(), 279experimental-webgl, 283getFps(), 271getFragmentShaderGLSL(),

272getFrame(), 270getTime(), 271getTimeInterval(), 271getVertexShaderGLSL(), 273identity(), 275initColorShader(), 276initLightingShader(), 277initNormalShader(), 276initPositionShader(), 276initShaders(), 274initTexture(), 277initTextureShader(), 276isAnimating(), 270obracanie trójk�ta, 284

drawArrays(), 284rotate(), 285start(), 285

okre�lanie dost�pnychkontekstów, 310

operacje na macierzach, 280perspective(), 275prosty model trójwymiarowy,

286bufor indeksów, 289bufor kolorów, 289bufor po�o�enia, 289drawElements(), 288, 289

pushColorBuffer(), 278pushIndexBuffer(), 278pushNormalBuffer(), 278pushPositionBuffer(), 278pushTextureBuffer(), 278requestAnimationFrame(), 269requestAnimFrame(), 269restore(), 272rotate(), 276rysowanie trójk�ta, 281

drawArrays(), 282, 283identity(), 283perspective(), 283pushPositionBuffer(), 283

save(), 272setAmbientLighting(), 279setDirectionalLighting(), 280setDrawStage(), 270setMatrixUniforms(), 279setShaderProgram(), 275shadery, 280

BLUE_COLOR, 283TEXTURE_

DIRECTIONAL_LIGHTING, 295

VARYING_COLOR, 288startAnimation(), 270stopAnimation(), 271translate(), 276trójwymiarowy �wiat, 296

attacheListeners(), 299bufory pod�ogi, 296bufory sze�cianów, 296bufory �cian, 296Controller, 307drawCeiling(), 304drawCrates(), 305drawFloor(), 304drawWalls(), 305getMousePos(), 298handleKeyDown(), 298handleKeyUp(), 299handleMouseDown(), 298handleMuseMove(), 298initBuffers(), 303initCratePosition(), 301initCubeBuffers(), 301initFloorBuffers(), 302

initWallBuffers(), 303loadTextures(), 297Model, 307stage(), 306tworzenie, 296updateCameraPos(), 303View, 307

wideo, 82formaty, 82H.264, 82odwracanie kolorów

w klipach, 90getImageData(), 91requestAnimFrame(), 91

Ogg Theora, 82WebM, 82wy�wietlanie klipów, 83

drawFrame(), 83drawImage(), 83requestAnimFrame(), 84

window.onload, 19wykresy, 203

ko�owy, 204arc(), 208drawLegend(), 207, 208drawPieBorder(), 205, 208drawSlices(), 206, 208getLegendWidth(), 205getTotalValue(), 206PieChart, 204

liniowy, 221drawLine(), 224, 227drawXAxis(), 223drawYAxis(), 224getLongestValueWidth(),

223LineChart, 222transformContext(), 225

s�upkowy, 209BarChart, 210drawBars(), 212, 215drawGridlines(), 213drawXAxis(), 214drawXLabels(), 212drawYAxis(), 214drawYValues(), 212getLabelAreaHeight(), 211

Page 36: Tytuł oryginału: HTML5 Canvas Cookbook

Skorowidz

326

getLongestValueWidth(),211

wizualizacja równa, 216drawEquation(), 219, 220

drawXAxis(), 217drawYAxis(), 218Graph, 216transformContext(), 219

Xxor, 52

Page 38: Tytuł oryginału: HTML5 Canvas Cookbook