Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00448 008672 10464253 na godz. na dobę w sumie
Java. Tworzenie gier - książka
Java. Tworzenie gier - książka
Autor: , , Liczba stron: 784
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-411-7 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> java - programowanie
Porównaj ceny (książka, ebook, audiobook).

Wykorzystaj do tworzenia gier
najpopularniejszy język programowania ery internetu

Java jest nowoczesnym i prostym językiem programowania zorientowanym obiektowo. Trudno nie doceniać jej zalet -- czytelna i zrozumiała składnia, uniwersalny, niezależny od platformy kod i przede wszystkich bezpłatny dostęp do doskonałych narzędzi programistycznych. Javę doceniło już wielu twórców oprogramowania, wśród których brakowało jednak twórców gier i aplikacji 'rozrywkowych'. Dotychczas w Javie tworzono jedynie proste układanki, gry karciane i łamigłówki lub nieśmiertelne aplety typu 'padający śnieg', które przez długi czas straszyły nas z przeglądarek internetowych. Czas na zmianę! Wykorzystaj swoje umiejętności programowania w Javie, sięgnij po wiadomości zawarte w tej książce i napisz prawdziwą grę -- z grafiką, inteligentnymi przeciwnikami, wydajnym silnikiem 3D wspomaganym sprzętowo i przestrzennym dźwiękiem.

'Java. Tworzenie gier' to książka o programowaniu gier, na jaką czekałeś. Zawiera zarówno opis podstawowych mechanizmów używanych w grach, jak i szczegółowe omówienie zaawansowanych technik. Dowiesz się, jak wykorzystać platformę Java 1.4 do tworzenia szybkich, pełnoekranowych gier akcji, przygodówek i trójwymiarowych strzelanek. Nauczysz się tworzyć wspomaganą sprzętowo grafikę, algorytmy sztucznej inteligencji i znajdowania drogi, realistyczne efekty dźwiękowe i mechanizmy obsługi gry dla wielu graczy.

Udowodnij 'fachowcom' krytykującym szybkość Javy, że nie mają racji. Napisz wspaniałą grę w Javie. W tej książce znajdziesz wszystkie wiadomości, które są do tego niezbędne.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI Java. Tworzenie gier KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Autorzy: David Brackeen, Bret Barker, Laurence Vanhelsuwe T³umaczenie: S³awomir Dzieniszewski (rozdz. 7, 8, 12), Pawe³ Gonera (rozdz. 1 – 6, 14 – 16), Miko³aj Szczepaniak (rozdz. 9 – 11, 13, 17 – 19) ISBN: 83-7361-411-7 Tytu³ orygina³u: Developing Games in Java Format: B5, stron: 756 Przyk³ady na ftp: 4924 kB Wykorzystaj do tworzenia gier najpopularniejszy jêzyk programowania ery internetu Java jest nowoczesnym i prostym jêzykiem programowania zorientowanym obiektowo. Trudno nie doceniaæ jej zalet — czytelna i zrozumia³a sk³adnia, uniwersalny, niezale¿ny od platformy kod i przede wszystkich bezp³atny dostêp do doskona³ych narzêdzi programistycznych. Javê doceni³o ju¿ wielu twórców oprogramowania, wġród których brakowa³o jednak twórców gier i aplikacji „rozrywkowych”. Dotychczas w Javie tworzono jedynie proste uk³adanki, gry karciane i ³amig³ówki lub nieġmiertelne aplety typu „padaj¹cy ġnieg”, które przez d³ugi czas straszy³y nas z przegl¹darek internetowych. Czas na zmianê! Wykorzystaj swoje umiejêtnoġci programowania w Javie, siêgnij po wiadomoġci zawarte w tej ksi¹¿ce i napisz prawdziw¹ grê — z grafik¹, inteligentnymi przeciwnikami, wydajnym silnikiem 3D wspomaganym sprzêtowo i przestrzennym dĥwiêkiem. „Java. Tworzenie gier” to ksi¹¿ka o programowaniu gier, na jak¹ czeka³eġ. Zawiera zarówno opis podstawowych mechanizmów u¿ywanych w grach, jak i szczegó³owe omówienie zaawansowanych technik. Dowiesz siê, jak wykorzystaæ platformê Java 1.4 do tworzenia szybkich, pe³noekranowych gier akcji, przygodówek i trójwymiarowych strzelanek. Nauczysz siê tworzyæ wspomagan¹ sprzêtowo grafikê, algorytmy sztucznej inteligencji i znajdowania drogi, realistyczne efekty dĥwiêkowe i mechanizmy obs³ugi gry dla wielu graczy. • Algorytmy wyġwietlania grafiki 2D • Tworzenie interfejsu u¿ytkownika z wykorzystaniem komponentów Swing • Programowanie efektów dĥwiêkowych dzia³aj¹cych w czasie rzeczywistym • Klient i serwer gry wieloosobowej • Wyġwietlanie grafiki 3D • Mapowanie tekstur i symulacja oġwietlenia • Drzewa BSP • Algorytmy detekcji kolizji i wykrywania drogi • Sztuczna inteligencja i tworzenie botów • Zapisywanie stanu gry • Optymalizacja kodu • System sterowania gr¹ Udowodnij „fachowcom” krytykuj¹cym szybkoġæ Javy, ¿e nie maj¹ racji. Napisz wspania³¹ grê w Javie. W tej ksi¹¿ce znajdziesz wszystkie wiadomoġci, które s¹ do tego niezbêdne. Spis treści O Autorze ......................................................................................... 15 Wstęp .............................................................................................. 17 Część I Podstawy gier w języku Java ..........................................25 Rozdział 1. Wątki w języku Java ......................................................................... 27 Co to jest wątek? ...................................................k...................................................k........ .28 Tworzenie i uruchamianie wątków w języku Java...................................................k.........28 Rozszerzanie klasy Thread ...................................................k......................................29 Implementacja interfejsu Runnable ...................................................k.........................29 Użycie anonimowej klasy wewnętrznej...................................................k...................29 Oczekiwanie na zakończenie wątku ...................................................k........................30 Uśpione wątki ...................................................k...................................................k.......30 Synchronizacja ...................................................k...................................................k............30 Po co nam synchronizacja?...................................................k......................................30 Jak synchronizować? ...................................................k...............................................31 Kiedy należy synchronizować?...................................................k................................32 Kiedy nie synchronizować? ...................................................k.....................................33 Unikanie zakleszczeń...................................................k...............................................33 Użycie wait() oraz notify()...................................................k.............................................34 Model zdarzeń Javy...................................................k...................................................k.....35 Kiedy używać wątków? ...................................................k.................................................36 Kiedy nie używać wątków?...................................................k............................................36 Podsumowanie: pule wątków...................................................k.........................................36 Podsumowanie ...................................................k...................................................k............41 Rozdział 2. Grafika 2D oraz animacja .................................................................. 43 Grafika pełnoekranowa ...................................................k..................................................44 Układ ekranu...................................................k...................................................k.........44 Kolor piksela i głębia koloru...................................................k....................................45 Częstotliwość odświeżania ...................................................k......................................46 Przełączanie do trybu pełnoekranowego ...................................................k.................46 Anti-aliasing...................................................k...................................................k..........50 Który tryb graficzny należy zastosować? ...................................................k................51 ......52 Rysunki............................................k...................................................k......................... Przezroczystość...................................................k...................................................k.....52 Formaty plików...................................................k...................................................k.....52 Odczytywanie rysunków...................................................k..........................................53 6 Java. Tworzenie gier Rysunki przyspieszane sprzętowo ...................................................k...........................56 Program testujący wydajność rysowania rysunków ...................................................k58 Animacja ...................................................k...................................................k...............61 Renderowanie aktywne...................................................k............................................64 Pętla animacji...................................................k...................................................k........64 Usuwanie migotania i szarpania...................................................k.....................................67 Podwójne buforowanie ...................................................k............................................67 Przełączanie stron ...................................................k...................................................k.68 Odświeżanie monitora i szarpanie ...................................................k...........................70 Klasa BufferStrategy...................................................k................................................70 Tworzenie zarządcy ekranów ...................................................k..................................71 Duszki ...................................................k...................................................k...................78 Proste efekty...................................................k...................................................k................84 Przekształcenia rysunków...................................................k........................................84 Podsumowanie ...................................................k...................................................k............89 Rozdział 3. Interaktywność i interfejs użytkownika ............................................. 91 Model zdarzeń AWT...................................................k...................................................k...94 Zdarzenia klawiatury...................................................k...................................................k...95 Zdarzenia myszy ...................................................k...................................................k.........99 Przesuwanie myszy metodą „rozglądania się”...................................................k.............103 Ukrywanie wskaźnika myszy ...................................................k................................107 Tworzenie klasy InputManager...................................................k....................................108 Zastosowanie obiektu InputManager ...................................................k...........................119 Zatrzymywanie gry ...................................................k................................................119 Dodajemy grawitację ...................................................k.............................................120 Projektowanie intuicyjnych interfejsów użytkownika ...................................................k.125 Wskazówki do projektu interfejsu użytkownika...................................................k....126 Wykorzystanie komponentów Swing...................................................k...........................127 Podstawy Swing...................................................k...................................................k..127 Stosowanie Swing w trybie pełnoekranowym...................................................k.......128 Tworzenie prostego menu ...................................................k............................................130 Konfiguracja klawiatury przez użytkownika ...................................................k...............135 Podsumowanie ...................................................k...................................................k..........141 Rozdział 4. Efekty dźwiękowe oraz muzyka........................................................ 143 Podstawy dźwięku...................................................k...................................................k.....144 API Java Sound ...................................................k...................................................k.........144 Otwieranie pliku dźwiękowego ...................................................k.............................145 Zastosowanie interfejsu Line ...................................................k.................................145 Odtwarzanie dźwięków ...................................................k................................................146 Tworzenie architektury filtrów działających w czasie rzeczywistym.............................151 Tworzenie filtra „echo”, działającego w czasie rzeczywistym .......................................155 Emulacja dźwięku 3D ...................................................k..................................................159 Mechanizmy potrzebne do tworzenia filtra 3D ...................................................k.....160 Implementacja filtra 3D ...................................................k.........................................161 Testowanie filtra 3D ...................................................k..............................................163 Tworzenie obiektu zarządzającego dźwiękiem...................................................k............167 Klasa Sound ...................................................k...................................................k........167 Klasa SoundManager ...................................................k.............................................168 Zmienne lokalne dla wątków ...................................................k.................................175 Odtwarzanie muzyki ...................................................k...................................................k.176 Odtwarzanie dźwięku CD ...................................................k......................................177 Odtwarzanie plików MP3 i Ogg Vorbis ...................................................k................177 Spis treści 7 Odtwarzanie muzyki MIDI ...................................................k....................................178 Tworzenie muzyki adaptacyjnej ...................................................k............................182 Podsumowanie ...................................................k...................................................k..........184 Rozdział 5. Tworzenie dwuwymiarowej gry platformowej ................................... 185 Tworzenie mapy złożonej z kafelków...................................................k..........................186 Implementacja mapy korzystającej z kafelków ...................................................k.....187 Ładowanie mapy złożonej z kafelków...................................................k...................190 Rysowanie mapy złożonej z kafelków...................................................k...................193 Rysowanie duszków...................................................k...............................................195 Przewijanie z paralaksą...................................................k..........................................195 Premie ...................................................k...................................................k.................197 Proste obiekty wrogów ...................................................k..........................................200 Wykrywanie kolizji ...................................................k...................................................k...207 Detekcja kolizji ...................................................k...................................................k...207 Obsługa kolizji ...................................................k...................................................k....208 Kolizje duszków...................................................k...................................................k..212 Dokończenie i przyspieszanie gry...................................................k................................213 Tworzenie wykonywalnego pliku .jar...................................................k..........................213 Pomysły na rozszerzenie gry...................................................k........................................215 Podsumowanie ...................................................k...................................................k..........216 Rozdział 6. Gry wieloosobowe ........................................................................... 217 Rewolucja w bibliotekach wejścia-wyjścia w języku Java.............................................219 Przegląd bibliotek NIO z JDK 1.4 ...................................................k.........................220 Kanały ...................................................k...................................................k.................220 Bufory ...................................................k...................................................k.................223 Selektory oraz klasy SelectionKey ...................................................k........................226 ChatterBox, prosta aplikacja dla wielu użytkowników...................................................k227 Serwer: ChatterServer...................................................k............................................227 Kompilowanie i uruchamianie serwera ...................................................k.................233 Klient: ChatterClient...................................................k..............................................235 Kompilowanie i uruchamianie klienta ...................................................k...................236 Szkielet serwera gry wieloosobowej ...................................................k............................237 Cele projektu i taktyka ...................................................k...........................................237 Projekt ...................................................k...................................................k.................238 Wspólne klasy i interfejsy...................................................k......................................242 Implementacja serwera ...................................................k..........................................244 Klient...................................................k...................................................k...................252 Przykładowa gra: RPS (kamień, papier, nożyczki)...................................................k......253 Klasy ...................................................k...................................................k...................253 Uruchamianie gry RPS ...................................................k..........................................256 Wykończanie gry: rozbudowa szkieletu ...................................................k......................258 Interfejs klienta ...................................................k...................................................k...258 Trwałość...................................................k...................................................k..............258 Listy znajomych, pokoje i czat ...................................................k..............................258 Administracja serwera...................................................k..................................................259 Rejestracja zdarzeń ...................................................k................................................259 Uruchamianie i wyłączanie...................................................k....................................260 Konsole administracyjne serwera ...................................................k..........................261 Śledzenie gry...................................................k...................................................k.......261 Zagadnienia zaawansowane ...................................................k.........................................262 Rozłączenia i ponowne połączenia ...................................................k........................262 Tunelowanie HTTP...................................................k................................................263 8 Java. Tworzenie gier Testowanie za pomocą botów...................................................k................................265 Te nieznośne modemy ...................................................k...........................................266 Profilowanie i tworzenie statystyk wydajności...................................................k......266 Dostrajanie wydajności...................................................k..........................................268 Podsumowanie ...................................................k...................................................k..........270 Część II Grafika trójwymiarowa i zaawansowane techniki programowania gier ...............271 Rozdział 7. Grafika trójwymiarowa .................................................................... 273 Typy renderowania grafiki trójwymiarowej ...................................................k................274 Nie zapominajmy o matematyce ...................................................k..................................275 Trygonometria i trójkąty prostokątne ...................................................k....................276 Wektory...................................................k...................................................k...............276 Podstawy grafiki trójwymiarowej ...................................................k................................281 Algebra trzech wymiarów ...................................................k............................................284 Wielokąty ...................................................k...................................................k..................289 Przekształcenia przestrzeni trójwymiarowej...................................................k................292 Rotacje ...................................................k...................................................k................293 Hermetyzacja przekształceń rotacji i translacji...................................................k......295 Stosowanie transformacji...................................................k.......................................298 Porządek rotacji ...................................................k...................................................k..300 Prosty potok tworzenia grafiki 3D ...................................................k...............................301 Ruch kamery ...................................................k...................................................k.............305 Bryły i usuwanie niewidocznych powierzchni...................................................k.............305 Iloczyn skalarny wektorów ...................................................k....................................307 Iloczyn wektorowy wektorów...................................................k................................308 Dodatkowe właściwości iloczynu skalarnego i wektorowego..................................311 Rysowanie wielokątów za pomocą konwertera skanującego .........................................312 Optymalizowanie konwertera skanującego za pomocą liczb stałoprzecinkowych ..317 Przycinanie w trzech wymiarach...................................................k..................................321 Ostateczny potok renderowania ...................................................k...................................324 Podsumowanie ...................................................k...................................................k..........332 Rozdział 8. Mapowanie tekstur i oświetlenie ..................................................... 333 Podstawy mapowania tekstur uwzględniającego perspektywę.......................................334 Wyprowadzenie równań wykorzystywanych do mapowania tekstur.......................335 Prosty mechanizm mapowania tekstur...................................................k.........................340 Wady naszego prostego mechanizmu renderującego ...............................................347 Optymalizowanie mapowania tekstur ...................................................k..........................348 Przechowywanie tekstur ...................................................k........................................349 Prosta optymalizacja ...................................................k..............................................352 Rozwijanie metod w miejscu wywołania ...................................................k..............356 Przykładowy program korzystający z szybkiego mapowania tekstur ......................358 Prosty mechanizm generowania oświetlenia...................................................k................359 Odbicie rozproszone ...................................................k..............................................359 Światło otoczenia ...................................................k...................................................k360 Uwzględnianie intensywności światła pochodzącego ze źródła światła ..................360 Spadek intensywności światła wraz z odległością...................................................k.360 Implementowanie punktowego źródła światła...................................................k.......361 Implementowanie oświetlania tekstur...................................................k..........................362 Tworzenie zaawansowanych trików oświetleniowych za pomocą map cieniowania.....369 Odnajdywanie prostokąta ograniczającego...................................................k............369 Stosowanie mapy cieniowania...................................................k...............................371 Spis treści 9 Budowanie mapy cieniowania ...................................................k...............................373 Budowanie powierzchni...................................................k.........................................375 Przechowywanie powierzchni w pamięci podręcznej ..............................................378 Przykład z cieniowaniem powierzchni ...................................................k..................384 Dodatkowe pomysły...................................................k...................................................k..385 Sugerowanie głębi...................................................k..................................................385 Fałszywe cienie...................................................k...................................................k...386 Mapowanie MIP...................................................k...................................................k..386 Interpolacja dwuliniowa...................................................k.........................................386 Interpolacja trójliniowa...................................................k..........................................387 Mapy wektorów normalnych i mapy głębokości...................................................k...387 Inne typy oświetlenia ...................................................k.............................................388 Podsumowanie ...................................................k...................................................k..........388 Rozdział 9. Obiekty trójwymiarowe.................................................................... 389 Usuwanie ukrytych powierzchni...................................................k..................................390 Algorytm malarza ...................................................k..................................................390 Odwrotny algorytm malarza ...................................................k..................................391 Z-bufor ...................................................k...................................................k................391 Z-bufor z wartościami 1/z...................................................k......................................393 Obliczanie z-głębokości...................................................k.........................................396 Animacja trójwymiarowa...................................................k.............................................397 Ruch postępowy...................................................k...................................................k..400 Ruch obrotowy...................................................k...................................................k....402 Grupy wielokątów ...................................................k...................................................k.....407 Iteracyjna obsługa wszystkich wielokątów należących do grupy.............................411 Wczytywanie grup wielokątów z pliku OBJ...................................................k................413 Format pliku OBJ...................................................k...................................................k414 Format pliku MTL ...................................................k.................................................420 Obiekty w grze ...................................................k...................................................k..........421 Zarządzanie obiektami w grze...................................................k......................................425 Łączenie elementów...................................................k...................................................k..427 Możliwe rozszerzenia w przyszłości...................................................k............................433 Podsumowanie ...................................................k...................................................k..........434 Rozdział 10. Zarządzanie sceną trójwymiarową za pomocą drzew BSP ................ 435 Wprowadzenie do drzew BSP...................................................k......................................436 Podstawy drzew binarnych...................................................k...........................................437 Jednowymiarowe drzewo BSP...................................................k.....................................440 Dwuwymiarowe drzewo BSP ...................................................k......................................442 Przykład budowy drzewa BSP...................................................k...............................443 Przykład przeglądania drzewa BSP ...................................................k.......................447 Implementacja dwuwymiarowego drzewa BSP...................................................k...........448 Linia podziału BSP ...................................................k................................................450 Wyznaczanie położenia punktu względem linii ...................................................k....450 Dwójkowy podział wielokąta ...................................................k................................454 Przeglądanie drzewa BSP ...................................................k......................................455 Przeglądanie poprzeczne...................................................k........................................457 Przeglądanie od przodu do tyłu...................................................k..............................458 Budowa drzewa...................................................k...................................................k...459 Znajdowanie punktu przecięcia dwóch prostych...................................................k...463 Przycinanie wielokątów do linii...................................................k.............................465 Usuwanie pustych przestrzeni T-złączy...................................................k.................467 Testowanie drzewa BSP ...................................................k........................................469 10 Java. Tworzenie gier Rysowanie wielokątów od przodu do tyłu ...................................................k...................471 Pierwszy przykład wykorzystania drzewa BSP ...................................................k...........479 Rysowanie obiektów na scenie ...................................................k....................................480 Wczytywanie map z pliku ...................................................k............................................482 Łączenie elementów...................................................k...................................................k..486 Rozszerzenia...................................................k...................................................k..............486 Podsumowanie ...................................................k...................................................k..........488 Rozdział 11. Wykrywanie kolizji .......................................................................... 489 Podstawy kolizji ...................................................k...................................................k........490 Kolizje typu obiekt-obiekt...................................................k............................................491 Eliminowanie testów...................................................k..............................................491 Sfery otaczające ...................................................k...................................................k..493 Walce otaczające...................................................k...................................................k.495 Problem przetwarzania dyskretno-czasowego...................................................k.......498 Kolizje typu obiekt-świat ...................................................k.............................................499 Prostopadłościany otaczające, wykorzystywane do wykrywankia kolizji z podłogami ...................................................k...................................................k......499 Znajdowanie liścia drzewa BSP dla danego położenia.............................................500 Implementacja testów wysokości podłogi i sufitu ...................................................k.501 Prostopadłościany otaczające, wykorzystywane do testowania kolizji ze ścianami .. 503 Punkt przecięcia z odcinkiem wielokąta reprezentowanego w drzewie BSP...........504 Problem narożników ...................................................k..............................................508 Implementacja wykrywania kolizji typu obiekt-świat..............................................509 Prosty program demonstracyjny wykrywający kolizje ...................................................k511 Obsługa kolizji z przesuwaniem ...................................................k..................................512 Przesuwanie obiektu wzdłuż innego obiektu...................................................k.........512 Przesuwanie obiektu wzdłuż ściany...................................................k.......................515 Grawitacja i płynny ruch na schodach (przesuwanie obiektu wzdłuż podłogi)........517 Skakanie...................................................k...................................................k..............520 Program demonstracyjny obsługujący kolizje z przesuwaniem .....................................521 Rozszerzenia...................................................k...................................................k..............522 Podsumowanie ...................................................k...................................................k..........522 Rozdział 12. Odnajdywanie drogi w grze .............................................................. 523 Podstawowa wiedza na temat technik odnajdywania drogi ............................................524 Pierwsze przymiarki do odnajdywania drogi w grze ...................................................k...524 Przeszukiwanie wszerz ...................................................k..........................................527 Podstawy algorytmu A* ...................................................k...............................................530 Stosowanie algorytmu A* w grze ...................................................k................................535 Algorytm A* w połączeniu z drzewami BSP...................................................k...............536 Przejścia ...................................................k...................................................k..............536 Implementowanie portali ...................................................k.......................................537 Uniwersalny mechanizm odnajdywania drogi ...................................................k.............541 Przygotowywanie robota PathBot...................................................k................................545 Sposoby ulepszania przeszukiwania A* ...................................................k......................549 Podsumowanie ...................................................k...................................................k..........550 Rozdział 13. Sztuczna inteligencja ...................................................................... 551 Podstawy sztucznej inteligencji ...................................................k...................................552 Pozbawianie botów ich boskiej mocy ...................................................k..........................553 „Widzenie”...................................................k...................................................k..........554 „Słyszenie”...................................................k...................................................k..........556 Spis treści 11 Maszyny stanów i obsługa reakcji ...................................................k...............................559 Maszyny probabilistyczne...................................................k............................................561 Przydatne funkcje generujące liczby losowe ...................................................k.........563 Podejmowanie decyzji...................................................k..................................................564 Wzorce ...................................................k...................................................k......................566 Unikanie...................................................k...................................................k..............567 Atakowanie ...................................................k...................................................k.........569 Uciekanie ...................................................k...................................................k............572 Celowanie ...................................................k...................................................k...........573 Strzelanie...................................................k...................................................k.............574 Tworzenie obiektów...................................................k...................................................k..575 Łączenie elementów...................................................k...................................................k..576 Mózgi!...................................................k...................................................k.................576 Zdrowie i umieranie...................................................k...............................................577 Dodawanie HUD-a...................................................k.................................................581 Uczenie się ...................................................k...................................................k................585 Wskrzeszanie botów ...................................................k..............................................586 Uczenie się botów ...................................................k..................................................588 Rozszerzenia programu demonstracyjnego ...................................................k...........593 Inne podejścia do sztucznej inteligencji...................................................k.......................593 Zespołowa sztuczna inteligencja...................................................k............................594 Podsumowanie ...................................................k...................................................k..........594 Rozdział 14. Skrypty gry ..................................................................................... 595 Książka kucharska skryptów: czego potrzebujemy ...................................................k.....596 Implementacja powiadomień wejścia i wyjścia ...................................................k...........597 Wyzwalacze ...................................................k...................................................k........599 Nasłuch obiektów gry...................................................k...................................................k600 Skrypty ...................................................k...................................................k.................. ....604 Projektowanie skryptu ...................................................k...........................................606 Wbudowywanie BeanShell...................................................k....................................608 Zdarzenia opóźnione ...................................................k...................................................k.612 Tworzenie zdarzeń opóźnionych w BeanShell ...................................................k......615 Łączymy wszystko razem ...................................................k............................................616 Rozszerzenia...................................................k...................................................k..............617 Podsumowanie ...................................................k...................................................k..........619 Rozdział 15. Trwałość — zapisywanie gry ........................................................... 621 Podstawy zapisywania gier ...................................................k..........................................621 Wykorzystanie API serializacji do zapisywania stanu gry .............................................623 Wprowadzenie do serializacji ...................................................k................................623 Serializacja: podstawy ...................................................k...........................................623 Serializacja: zasady...................................................k................................................626 Serializacja: pułapki...................................................k...............................................629 Zmiana domyślnego działania mechanizmu serializacji...........................................633 Tworzenie zrzutu ekranu gry...................................................k........................................636 Tworzenie miniatury ze zrzutem ekranu...................................................k................638 Zapisywanie rysunku ...................................................k.............................................639 Zapisywanie gier we właściwym miejscu...................................................k....................641 Podsumowanie ...................................................k...................................................k..........642 12 Java. Tworzenie gier Część III Optymalizacja i kończenie gry .......................................643 Rozdział 16. Techniki optymalizacji..................................................................... 645 HotSpot..............................................k...................................................k....................... Zasady optymalizacji...................................................k...................................................k.646 Profilowanie ...................................................k...................................................k..............646 Testowanie wydajności...................................................k..........................................647 Użycie programu profilującego HotSpot ...................................................k...............647 ....651 Optymalizacje specyficzne dla języka Java...................................................k...........652 Eliminacja nieużywanego kodu ...................................................k.............................652 Wyciąganie niezmienników pętli...................................................k...........................653 Eliminacja wspólnych podwyrażeń ...................................................k.......................653 Propagacja stałych ...................................................k.................................................653 Rozwijanie pętli (tylko maszyna wirtualna server) ..................................................654 Metody inline ...................................................k...................................................k......654 Sztuczki optymalizacji ...................................................k.................................................655 Algorytmy ...................................................k...................................................k...........655 Zmniejszanie siły operacji: przesuwanie bitów ...................................................k.....656 Zmniejszanie siły operacji: reszta z dzielenia...................................................k........657 Zmniejszanie siły operacji: mnożenie...................................................k....................657 Zmniejszanie siły operacji: potęgowanie...................................................k...............658 Więcej na temat wyciągania niezmienników pętli...................................................k.658 Tablice wartości funkcji...................................................k.........................................659 Arytmetyka stałoprzecinkowa ...................................................k...............................662 Wyjątki...................................................k...................................................k................662 Wejście-wyjście ...................................................k...................................................k..662 Pliki mapowane w pamięci ...................................................k....................................663 Wykorzystanie pamięci i zbieranie nieużytków...................................................k...........664 Sterta Java oraz zbieranie nieużytków...................................................k...................664 Monitorowanie zbierania nieużytków...................................................k....................665 Monitorowanie użycia pamięci...................................................k..............................666 Dostrajanie sterty ...................................................k...................................................k670 Dostrajanie procesu zbierania nieużytków ...................................................k............671 Redukowanie tworzenia obiektów...................................................k.........................672 Ponowne wykorzystanie obiektów ...................................................k........................672 Pule obiektów...................................................k...................................................k......673 Zauważalna wydajność ...................................................k................................................674 Rozdzielczość zegara ...................................................k.............................................674 Podsumowanie ...................................................k...................................................k..........679 Rozdział 17. Tworzenie dźwięków i grafiki gry ..................................................... 681 Wybór wyglądu i sposobu działania gry ...................................................k......................682 Szukanie inspiracji ...................................................k.................................................682 Zachowywanie spójności ...................................................k.......................................683 Zdobywanie darmowych materiałów do gry...................................................k................683 Praca z grafikami i autorami dźwięków...................................................k.......................684 Narzędzia...................................................k...................................................k...................685 Tworzenie dźwięków ...................................................k...................................................k685 Formaty plików dźwiękowych...................................................k...............................687 Tworzenie tekstur i duszków...................................................k........................................687 Formaty plików graficznych ...................................................k..................................688 Tworzenie tekstur bezszwowych ...................................................k...........................689 Tworzenie tekstur zastępczych ...................................................k..............................690 Spis treści 13 Tworzenie tekstur przejściowych ...................................................k..........................691 Tworzenie wielopoziomowych tekstur ...................................................k..................692 Tworzenie obrazów tytułowych i grafiki dla wyświetlaczy HUD..................................694 Tworzenie grafiki interfejsu użytkownika ...................................................k...................694 Dostosowywanie komponentów Swing...................................................k.................694 Tworzenie własnych czcionek ...................................................k.....................................696 Podsumowanie ...................................................k...................................................k..........701 Rozdział 18. Projekt gry i ostatnie 10 prac ....................................................... 703 Ostatnie 10 prac ...................................................k...................................................k.....704 Efekty...................................................k...................................................k..................704 Maszyna stanów gry ...................................................k..............................................705 Elementy projektu gry...................................................k..................................................711 Środowiska...................................................k...................................................k..........712 Fabuła...................................................k...................................................k..................712 Właściwa gra...................................................k...................................................k.......714 Uczenie gracza sposobu gry...................................................k...................................716 Tworzenie edytora map...................................................k................................................717 Szukanie błędów ...................................................k...................................................k.......719 Problemy z szukaniem błędów w Java2D ...................................................k.............722 Rejestrowanie zdarzeń ...................................................k...........................................723 Ochrona kodu ...................................................k...................................................k............725 Dystrybucja gry ...................................................k...................................................k.........726 Dystrybucja gry za pomocą Java Web Start...................................................k.................728 Pobieranie zasobów z plików .jar ...................................................k..........................728 Podpisywanie plików .jar...................................................k.......................................728 Tworzenie pliku JNLP ...................................................k...........................................729 Konfigurowanie serwera WWW...................................................k............................731 Dystrybucja gry w postaci kompilacji natywnej ...................................................k..........732 Aktualizacje i łatki ...................................................k...................................................k....733 Problem obciążenia serwera...................................................k.........................................733 Opinie użytkowników i testy beta...................................................k................................734 Zarabianie pieniędzy ...................................................k...................................................k.736 Łączymy wszystko razem ...................................................k............................................737 Podsumowanie ...................................................k...................................................k..........737 Rozdział 19. Przyszłość ...................................................................................... 739 Ewolucja Javy ...................................................k...................................................k...........739 Java Community Process ...................................................k.......................................740 Bug Parade ...................................................k...................................................k..........740 Przyszłość: Java 1.5 „Tiger” ...................................................k........................................740 Szablony (JSR 14)...................................................k..................................................741 Wyliczenia (JSR 201) ...................................................k............................................742 Statyczne importowanie (JSR 201)...................................................k........................743 Poprawiona pętla for (JSR 201)...................................................k.............................744 Interfejs API kompilatora (JSR 199) ...................................................k.....................744 Format transferu sieciowego (JSR 200)...................................................k.................745 Współdzielona maszyna wirtualna (JSR 121) ...................................................k.......745 Wymagania stawiane platformie Java...................................................k..........................746 Potrzebne: więcej opcji dla obsługi myszy i klawiatury...........................................746 Potrzebne: obsługa joysticka...................................................k..................................747 Potrzebne: przyspieszane sprzętowo, półprzezroczyste obrazy................................747 Potrzebne: dokładniejszy zegar...................................................k..............................747 14 Java. Tworzenie gier Potrzebne: grafika przyspieszana sprzętowo i tryb pełnoekraknowy w systemie Linux...................................................k.................................................748 Potrzebne: trójwymiarowa grafika przyspieszana sprzętowo,k włączona do środowiska Javy ...................................................k.............................748 Potrzebne: optymalizacja rozkazów SIMD w maszynie HotSpot ............................749 Pożądane: więcej opcji wygładzania czcionek ...................................................k......750 Pozostałe możliwości...................................................k.............................................752 Nowe urządzenia i Javy Games Profile (JSR 134) ...................................................k......752 Podsumowanie ...................................................k...................................................k..........753 Dodatki ...................................................d....................................755 Skorowidz....................................................................................... 757 Rozdział 11. Wykrywanie kolizji W tym rozdziale:  Podstawy kolizji.  Kolizje typu obiekt-obiekt.  Kolizje typu obiekt-świat.  Prosty program demonstracyjny wykrywający kolizje.  Obsługa kolizji z przesuwaniem.  Program demonstracyjny obsługujący kolizje z przesuiwaniem.  Rozszerzenia.  Podsumowanie. Pamiętasz grę Pong? Niezależnie od tego, czy mamy do czynienia z piłeczką odbijaną rakietkami, laserem trafiającym robota, poszukiwaczem skarbów wpadającym w pułapkę, bohaterem znaj- dującym dodatkową amunicję, dwoma walczącymi potworami czy po prostu z graczem idącym przy ścianie — niemal w każdej grze trzeba zastosować jakiś mechanizm wy- krywania kolizji. W rozdziale 5., „Tworzenie dwuwymiarowej gry platformowej”, stworzyliśmy prosty dwuwymiarowy system wykrywania kolizji, który świetnie się sprawdzał w przypad- ku nieskomplikowanej gry dwuwymiarowej. W tym rozdziale spróbujemy rozszerzyć omówione tam zagadnienia i więcej czasu poświęcić na wykrywanie kolizji pomiędzy obiektami (typu obiekt-obiekt) oraz pomiędzy obiektami a wielokątami przechowywa- nymi w drzewach BSP (typu obiekt-świat). Zajmiemy się także niemniej ważnym zagadnieniem wyboru sposobu obsługi kolizji po jej wykryciu, np. poruszaniem się wzdłuż ścian lub umożliwieniem obiektom w grze samodzielnej obsługi swojego zachowania w przypadku ikolizji. 490 Część II ♦ Grafika trójwymiarowa i zaawansowane techniki progIramowania gier Podstawy kolizji Wykrywanie kolizji, wbrew nazwie, tak naprawdę nie sprowadza się do samego wykry- wania. Z kolizjami związane są trzy interesujące nas zagadnienia:  Decydowanie, które kolizje chcemy wykrywać. Byłoby stratą czasu testowanie, czy dwa obiekty ze sobą nie kolidują, jeśli znajdujią się na dwóch różnych krańcach świata przedstawionego w grze. Należy się także zastaniowić, czy w świecie z 1 000 poruszających się obiektów ma sens testowanie wiystąpienia kolizji pomiędzy każdą parą obiektów — czyli w sumie 999 000 testóiw? Powinniśmy więc próbować maksymalnie ograniczyć liczbę obiektów, wi przypadku których staramy się wykryć wystąpienie zdarzenia kolizji. Najiprostszym sposobem na wprowadzenie takiego ograniczenia jest testowaniie tylko obiektów znajdujących się stosunkowo blisko gracza.  Wykrywanie kolizji. Wybór techniki wykrywania kolizji zależy od oczekiiwanej dokładności kolizji w grze. Można oczywiście zastosowiać doskonały algorytm wykrywania kolizji i sprawdzać wszystkie wielokąty inależące do obiektu ze wszystkimi wielokątami tworzącymi inny obiekt, niależy jednak brać pod uwagę związany z takim działaniem koszt obliczeniowyi. Podobnie, w świecie dwuwymiarowym moglibyśmy testować ewentualne kolizjie wszystkich pikseli jednego dwuwymiarowego obiektu ze wszystkimi pikseliami innego obiektu. W grach komputerowych stosuje się zwykle mniej dokładine techniki wykrywania kolizji, które jednak wykonują swoje zadanie znaczniie szybciej.  Obsługa kolizji. Jeśli dany obiekt koliduje z innym elementem sceniy, należy być przygotowanym na różne sposoby obsługi różnych typówi kolizji. Przykładowo, pocisk kolidujący z robotem może spowodować zniszczeinie zarówno pocisku, jak i robota. Obiekt dochodzący do ściany może się dailej przemieszczać wzdłuż tej ściany. Podobnych przykładów jest wiele. Podsumujmy — w grze powinny być podejmowane próby realizowania następujących celów w zakresie wykrywania kolizji:  eliminowanie jak najwięcej testów wystąpienia kolizjii;  szybkie podejmowanie decyzji, czy kolizja wystąpiła;  zapewnianie mechanizmu wykrywania kolizji o wystarcizającej precyzji;  obsługiwanie kolizji w naturalny sposób, który nie będizie niepotrzebnie zwracał uwagi gracza podczas gry. Ostatni cel oznacza także to, że nie powinniśmy zbytnio ograniczać możliwości ruchu gracza podczas gry. Przykładowo gracz nie powinien być całkowicie zatrzymywany po kolizji ze ścianą. Zamiast tego powinniśmy umożliwić mu poruszanie się wzdłuż ściany lub spowodować jego nieznaczne odbicie. Nie chcemy także, by nasz mechanizm wykrywania kolizji był na tyle niedokładny, by gracz mógł oszukiwać, np. chowając się w ścianie w niekitórych miejscach mapy. Rozdział 11. ♦ Wykrywanie kolizji 491 Zaczniemy od prostego algorytmu wykrywania kolizji. Wszystkie poruszające się ele- menty w grze będziemy traktować jak obiekty, niezależnie od tego, czy będzie to po- twór, gracz, pocisk lub cokolwiek innego. W przypadku każdego tak ogólnie zdefinio- wanego obiektu będziemy wykonywali następujące kroki: 1. Zaktualizuj położenie obiektu. 2. Sprawdź, czy nie występuje kolizja z innymi obiektami ilub z elementami środowiska. 3. Jeśli wykryto kolizję, ustaw obiekt na jego wcześniejiszej pozycji. Zauważ, że po każdym ruchu obiektu sprawdzamy, czy nie wystąpiła kolizja. Alterna- tywnym rozwiązaniem jest przeniesienie w nowe miejsca wszystkich obiektów i dopiero potem sprawdzenie występowania ewentualnych kolizji. W takim przypadku należałoby jednak przechowywać dane o poprzednich położeniach wszystkich obiektów — poja- wiłby się problem, gdyby się okazało, że trzy lub więcej obiektów powoduje kolizje. Zauważ także, że ten podstawowy algorytm w przypadku wystąpienia kolizji po prostu odstawia obiekt na jego wcześniejsze położenie. Zwykle będziemy chcieli stosować inne sposoby obsługi kolizji, zależne od ich typu. Skoro podstawowy algorytm został już omówiony, przejdźmy do wykrywania i obsługi kolizji typu obiekt-obiekt w praktyce. Kolizje typu obiekt-obiekt Niezależnie od tego, jakiej precyzji oczekujemy od stosowanego algorytmu wykry- wania kolizji, idealnym rozwiązaniem jest wyeliminowanie maksymalnej liczby testów kolizji typu obiekt-obiekt i wcześniejsze wykonanie kilku innych testów, wskazujących na duże prawdopodobieństwo wystąpienia kolizji pomiędizy parą obiektów. Eliminowanie testów Jest oczywiste, że w przypadku obiektu, który nie wykonuje żadnego ruchu od ostatniej klatki, nie są potrzebne żadne testy wykrywające kolizję powodowaną przez ten obiekt. Przykqładowo skrzynia znajdująca się w pomieszczeniu nie może powodować kolizji z żadnym innym elementem sceny. Inne obiekty mogą oczywiście kolidować z tą skrzy- nią, jednak takie kolizje są obsługiwane przez te obiiekty, a nie przez statyczną skrzynię. Aby wyeliminować maksymalną liczbę przyszłych testów na występowanie kolizji, po- winniśmy ograniczyć zbiór badanych obiektów do tych, które znajdują się w swoim bez- pośrednim sąsiedztwie. Jednym ze sposobów takiej eliminacji jest przyporządkowanie obiektów do pól specjal- nej siatki (patrz rysunek 11.1). Każdy obiekt musi należeć do dokładnie jednego z ta- kich pól. Nawet jeśli obiekt częściowo zajmuje obszar wielu pól, trzeba zdecydować 492 Część II ♦ Grafika trójwymiarowa i zaawansowane techniki progIramowania gier Rysunek 11.1. Aby ograniczyć liczbę testów na występowanie kolizji typu obiekt-obiekt, możemy przyporządkować obiekty do pól siatki i wykonywać testy dla obiektów znajdujących się w tych samych i sąsiadujących polach o jego przyporządkowaniu do dokładnie jednego z nich. Dzięki temu obiekt będzie mu- siał testować wystąpienie kolizji wyłącznie z obiektami z pola, w którym się znajduje, oraz z pól sąsiadujących z tym polem. Innymi sposobami izolowania obiektów jest tworzenie siatek jedno- i trójwymiarowych. Przykładowo, w dwuwymiarowej grze przewijanej, obiekty można posortować zgod- nie z ich współrzędną x, dzięki czemu będzie można wykonywać testy tylko dla obiek- tów sąsiadujących na liście. W przypadku gier trójwymiarowych obiekty można od- izolować za pomocą siatki trójwymiarowej zamiast dwuwymiarowej — każda komórka będzie wówczas miała kształt sześcianu, nie kwadratu. W tym rozdziale do wykrywa- nia kolizji w grach z mechanizmem trójwymiarowym będziemy jednak stosowali siatkę w prostszej wersji dwuwymiarowej. Izolowanie obiektów za pomocą siatki umożliwia także łatwe usuwanie obiektów ze sceny. Przykładowo możemy zastosować rozwiązanie, w którym rysowane są tylko obiekty w widocznych
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Java. Tworzenie gier
Autor:
, ,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: