Aditya Ravi Shankar zaczął programować w 1993, kiedy to poznał świat komputerów. Bez dostępu do internetu i zasobów online, napisał swoją pierwszą grę w języku GW-BASIC, przepisując kod z książki, którą znalazł w lokalnej bibliotece.
Po ukończeniu studiów w Indian Institute of Technology w Madrasie w 2001, Aditya spędził prawie dekadę pracując jako konsultant ds. oprogramowania, pracując nad systemami sprzedaży i analizy dla banków inwestycyjnych oraz dla dużych firm z listy Fortune 100. Ostatecznie porzucił świat korporacji i skoncentrował się na tym, co uwielbiał robić
Zdeklarowany maniak technologii, Aditya zaczął spędzać czas tworząc własne projekty i eksperymentując, korzystając ze wszystkich możliwych nowych języków i technologii, oczywiście włącznie z HTML5. W tym czasie stał się znany po odtworzeniu kilku klasycznych gier w języku HTML5, włącznie ze słynną grą strategiczną w czasie rzeczywistym Command and Conquer oraz grą Commandos: Behind Enemy Lines.
Oprócz programowania, Aditya pasjonuje się bilardem, salsą i rozwojem osobistym. Rozwija własną stronę internetową, na której publikuje artykuły związane z programowaniem gier, rozwojem osobistym i bilardem. Umieszcza na niej również wersje demo swoich popularnych gier.
W czasie wolnym od pisania i pracy nad własnymi projektami Aditya doradza firmom, pomagając im wdrażać nowe oprogramowanie i gry.
Spis treści
O autorze 9
O recenzencie technicznym 11
Rozdział 1. Podstawy języka HTML5 i JavaScript 13
- Podstawowa strona HTML5 13
- Element canvas 14
- Rysowanie prostokątów 16
- Rysowanie ścieżek złożonych 17
- Rysowanie tekstu 18
- Dostosowywanie stylów rysowania (kolorów i tekstur) 19
- Rysowanie obrazów 21
- Przekształcanie i obracanie 22
- Element audio 23
- Element image 26
- Wczytywanie obrazów 26
- Arkusze sprite'ów 27
- Animacja: czasomierz i pętle gry 29
- Podsumowanie 31
Rozdział 2. Tworzenie podstawowego świata gry 33
- Podstawowy układ HTML 33
- Tworzenie ekranu powitalnego i głównego menu 34
- Wybór poziomu 38
- Wczytywanie obrazów 41
- Wczytywanie poziomów 44
- Animowanie gry 45
- Obsługa myszy 48
- Definiowanie stanów naszej gry 50
- Podsumowanie 54
Rozdział 3. Podstawy silnika fizyki 55
- Podstawy Box2D 55
- Konfiguracja Box2D 56
- Definiowanie świata 57
- Dodawanie naszego pierwszego ciała: podłoże 57
- Rysowanie świata: konfigurowanie rysowania w trybie debugowania 59
- Animowanie świata 60
- Dodawanie kolejnych elementów Box2D 62
- Tworzenie prostokątnego ciała 62
- Tworzenie okrągłego ciała 64
- Tworzenie wielokątnego ciała 65
- Tworzenie ciał składających się z wielu kształtów 67
- Łączenie ciał za pomocą złączy 69
- Śledzenie kolizji i uszkodzeń 71
- Obiekty wykrywające kontakt 72
- Rysowanie własnych bohaterów 74
- Podsumowanie 76
Rozdział 4. Integrowanie silnika fizyki 79
- Definiowanie encji 79
- Dodawanie Box2D 82
- Tworzenie encji 84
- Dodawanie encji do poziomów 85
- Konfigurowanie rysowania w trybie debugowania Box2D 87
- Rysowanie encji 90
- Animowanie świata Box2D 92
- Wczytywanie bohatera 93
- Wystrzeliwanie bohatera 95
- Kończenie poziomu 99
- Zniszczenia po kolizji 102
- Rysowanie paska procy 104
- Zmiana poziomów 106
- Dodawanie dźwięku 107
- Dodawanie dźwięków zniszczenia i odbijania 108
- Dodawanie muzyki w tle 111
- Podsumowanie 114
Rozdział 5. Tworzenie gry mobilnej 115
- Wyzwania związane z rozwijaniem gier na urządzenia mobilne 115
- Responsywna gra 116
- Automatyczne skalowanie i zmiana rozmiaru 117
- Obsługa różnych proporcji 120
- Poprawki w obsłudze myszy i zdarzenia dotyku 122
- Wczytywanie gry na urządzeniu mobilnym 124
- Rozwiązywanie problemów z dźwiękami w przeglądarkach mobilnych 126
- Web Audio API 126
- Integrowanie API Web Audio 129
- Ostatnie poprawki 131
- Zapobieganie przypadkowemu przewijaniu 131
- Włączanie trybu pełnoekranowego 131
- Korzystanie z platform do tworzenia hybrydowych aplikacji mobilnych 132
- Optymalizacja zasobów gry dla urządzeń mobilnych 133
- Podsumowanie 134
Rozdział 6. Tworzenie świata gry RTS 135
- Podstawowy układ HTML 136
- Tworzenie ekranu powitalnego i menu głównego 136
- Tworzenie pierwszego poziomu 143
- Wczytywanie ekranu z opisem misji 145
- Implementowanie interfejsu gry 150
- Implementowanie przesuwania mapy 157
- Podsumowanie 160
Rozdział 7. Umieszczanie encji w naszym świecie 163
- Definiowanie encji 163
- Definiowanie pierwszej encji: obiekt bazowy 164
- Dodawanie encji do poziomu 168
- Rysowanie encji 171
- Dodawanie stacji dokującej 175
- Dodawanie budynku typu harvester 178
- Dodawanie działka naziemnego 179
- Dodawanie pojazdów 182
- Dodawanie statku powietrznego 187
- Dodawanie elementów terenu 190
- Zaznaczanie encji gry 193
- Wyróżnianie zaznaczonych encji 198
- Podsumowanie 202
Rozdział 8. Inteligentne przesuwanie jednostek 203
- Wydawanie poleceń jednostkom 203
- Wysyłanie i otrzymywanie poleceń 206
- Przetwarzanie poleceń 207
- Implementowanie ruchu statku powietrznego 208
- Odnajdowanie ścieżek 213
- Definiowanie siatki do znalezienia ścieżki 213
- Implementowanie ruchu pojazdów 217
- Wykrywanie kolizji i nawigacja 221
- Instalowanie pojazdu typu harvester 227
- Płynniejszy ruch jednostki 228
- Podsumowanie 230
Rozdział 9. Dodawanie kolejnych elementów gry 233
- Implementowanie podstaw aspektów finansowych 233
- Ustawianie początkowej sumy pieniędzy 233
- Implementowanie paska bocznego 235
- Generowanie pieniędzy 236
- Kupowanie budynków i jednostek 238
- Dodawanie przycisków na pasku bocznym 238
- Włączanie i wyłączanie przycisków na pasku bocznym 241
- Konstruowanie pojazdów i statku powietrznego na podstawie budynku typu starport 244
- Konstruowanie budynków w budynku typu base 252
- Kończenie poziomu 260
- Implementowanie okna dialogowego wiadomości 260
- Implementowanie wyzwalaczy 264
- Podsumowanie 268
Rozdział 10. Dodawanie broni i walki 271
- Implementowanie systemu walki 271
- Dodawanie pocisków 271
- Polecenia związane z walką dla działek 279
- Polecenia związane z walką w obiekcie aircraft 283
- Polecenia dotyczące walki dla pojazdów 287
- Tworzenie inteligentnego wroga 292
- Dodawanie mgły wojny 295
- Definiowanie obiektu mgły 295
- Rysowanie mgły 297
- Końcowe poprawki 300
- Podsumowanie 302
Rozdział 11. Finalizacja kampanii jednego gracza 303
- Dodawanie dźwięku 303
- Konfigurowanie dźwięków 303
- Przyjmowanie poleceń 305
- Wiadomości 307
- Walka 308
- Wsparcie dla urządzeń mobilnych 309
- Włączanie obsługi dotykiem 309
- Włączanie wsparcia dla techniki WebAudio 312
- Tworzenie kampanii jednego gracza 313
- Ratunek 314
- Napad 320
- Pod oblężeniem 324
- Podsumowanie 334
Rozdział 12. Tryb wielu graczy z wykorzystaniem WebSocket 335
- Korzystanie z interfejsu WebSocket API za pomocą Node.js 335
- Technologia WebSocket w przeglądarce 335
- Tworzenie serwera HTTP w Node.js 338
- Tworzenie serwera WebSocket 339
- Tworzenie lobby gry w trybie wielu graczy 342
- Definiowanie ekranu lobby trybu wielu graczy 342
- Wypełnianie listy gier 344
- Dołączanie i wychodzenie z pokoju gry 350
- Rozpoczynanie gry w trybie wielu graczy 354
- Definiowanie poziomu w trybie wielu graczy 354
- Wczytywanie poziomu dla wielu graczy 356
- Podsumowanie 360
Rozdział 13. Rozgrywka w trybie wielu graczy 361
- Krokowy model sieci 361
- Pomiar opóźnienia sieci 362
- Wysyłanie poleceń 367
- Kończenie gry w trybie wielu graczy 371
- Kończenie gry poprzez pokonanie gracza 371
- Kończenie gry po rozłączeniu jednego gracza 375
- Kończenie gry po utracie połączenia 376
- Implementowanie czatu graczy 379
- Podsumowanie 384
Rozdział 14. Podstawowe narzędzia programisty gier 387
- Dostosowanie edytora kodu 388
- Kolorowanie składni i uzupełnianie kodu 388
- Niestandardowe rozszerzenia 388
- Lintowanie 390
- Fragmenty kodu 391
- Integracja z systemem Git 392
- Zintegrowane debugowanie 393
- Pisanie modułowego kodu 393
- Automatyzacja pracy programisty 394
- Podstawowe narzędzia w uproszczonej metodzie pracy 395
- Podsumowanie 397
Skorowidz 399