Box2D. Fizyczny świat w pudełku - ebook
Box2D. Fizyczny świat w pudełku - ebook
Czy wiesz, co wpłynęło na sukces Angry Birds? Realistyczna fizyka, za którą stoi Box2D – silnik fizyczny wykorzystywany dzisiaj w setkach gier.
Autorom, posiłkującym się silnikiem Box przez ostatnie kilka lat działalności w branży, nie udało się co prawda napisać gry na porównywalnym poziomie, niemniej jednak są oni współtwórcami kilku projektów, które odniosły wymierny sukces komercyjny.
Publikacja ta, dzięki odsłonięciu technik implementacyjnych, ma na celu zachęcić czytelników do tworzenia ciekawych i oryginalnych gier, co z pewnością przyczyni się do podniesienia rangi polskiego GameDevu na świecie i dalszego pomyślnego rozwoju tej sfery polskiej wytwórczości.
Z książki dowiesz się, jak:
- napisać dobrą, zgodną z obecnymi standardami grę na swojego smartfona,
- zaimplementować funkcjonalność podobną do zastosowanej w sztandarowych tytułach,
- tworzyć własne rozwiązania z uwzględnieniem fizyki,
- wzbogacić swój program o fizykę.
Czytając tę książkę powinieneś znać:
- C++ w stopniu podstawowym,
- zintegrowane środowiska programistyczne, w tym Microsoft Visual Studio,
- podstawy mechaniki Newtona.
Spis treści
Rozdział 1. Wprowadzenie
1.1. Dla kogo jest ta książka?
1.2. Dlaczego Box2D?
1.3. Platformy docelowe
1.4. Materiały uzupełniające
Rozdział 2. Principia physica, czyli podstawy fizyki gier
2.1. Teoria
2.1.1. Podstawowe wielkości fizyczne
2.1.2. Rachunek wektorowy
2.2. Rigid body physics, czyli fizyka ciała sztywnego
2.2.1. Struktura silnika fizycznego
2.3. Soft body physics, czyli fizyka ciała deformowalnego?
Rozdział 3. Przygotowujemy środowisko, czyli decyzje projektowe
3.1. Zintegrowane środowisko programistyczne
3.1.1. Konfiguracja
3.1.2. Portowalność
3.2. Wizualizacja obiektów fizycznych
3.3. Debug framework – szablon roboczy
Rozdział 4. Otwieramy pudełko!
4.1. Faza zerowa: inicjalizacja i parametryzacja świata Box2D 45 4.2. Faza pierwsza: tłusta oliwa
4.2.1. Prymitywny start
4.2.2. Obiekty „wielkie i ciężkie”
4.2.3. Podłoże
4.2.4. Lokomotywa
4.3. Faza druga: para buch
4.3.1. Siły
4.3.2. Kolizje
4.4. Faza trzecia: koła w ruch
4.4.1. Liny
4.4.2. Mosty
4.4.3. Ciała złożone
4.4.4. Cięcie obiektów
4.4.5. Ciała miękkie
4.4.6. Obiekt ragdoll
4.4.7. Profiler
Rozdział 5. Piszemy „prawdziwą” grę!
5.1. Nowy, lepszy szablon aplikacji
5.1.1. Klasa gry
5.1.2. Dodajemy Box!
5.1.3. Mini Birds
5.2. Port na Android OS
5.3. Port na iOS
5.4. Port dokądkolwiek
Rozdział 6. Podsumowanie
Bibliografia
Dodatek 1. C++. Materiał referencyjny
Dodatek 2. OpenGL ES 1.1. Materiał referencyjny
Skorowidz
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-01-18142-0 |
Rozmiar pliku: | 3,6 MB |
FRAGMENT KSIĄŻKI
Lubię fizykę, lecz kocham kreskówki.
Stephen Hawking
Przed podawaniem ścisłych konkretów, pozwolimy sobie wprowadzić zdrową równowagę, budując zasadność powstania tejże książki; książki o fizycznym świecie w pudełku zwanym Box2D.
Z pewnego punktu widzenia jej powstanie jest bowiem średnio zasadne: po co komu blisko 200 stron rozwinięcia ogólnodostępnej, najeżonej przykładami dokumentacji do silnika fizycznego¹. Doświadczony programista przystąpi do właściwej implementacji w kilkanaście minut od pobrania i uruchomienia hello world².
Aby odeprzeć powyższe, musimy posłużyć się dość długim (i niepotrzebnym) wywodem na temat faktycznego stanu naszej ulubionej branży (jaką jest oczywiście gamedev³).
Gry komputerowe kreślą pewien bardzo specyficzny obszar, leżący gdzieś na styku nauk ścisłych i humanistycznych. Z jednej strony pogardzane przez poważne środowiska ściśle naukowe, z drugiej przez nieco mniej poważne środowiska antropocentryczne; ci pierwsi uważają, że „jakieś tam gry” to żart z ich dorobku, ci drudzy – odwrotnie, że ludzi obserwujących całymi dniami rzędy uciekających cyferek nie stać na głębsze myśli.
Tymczasem, aby od zera zrealizować grę AAA⁴, potrzeba chyba wszelkiej możliwej wiedzy z zakresu informatyki, w doskonałej części matematyki i w niezbywalnej części fizyki. Algorytmika, programowanie niskopoziomowe procesorów, rozmaite struktury danych, reprezentacja świata w trójwymiarze, symulacja zjawisk naturalnych, komunikacja z urządzeniami zewnętrznymi, implementacja we wszelakich językach programowania, komunikacja sieciowa… tyle nam przychodzi do głowy w trakcie pisania tego zdania, ale obeznany w nauce i technologiach informacyjnych Czytelnik z całą pewnością przywoła co najmniej drugie tyle.
Jednak nawet najlepiej rozwinięty silnik, na którym jest oparta gra, będzie zupełnie bezużyteczny bez wyobraźni projektantów i artystów – to oni bowiem nadają grom klimat, który albo na lata zapada w pamięci, albo pozostaje nieistotnym dodatkiem do barwnego wszechświata gier komputerowych. Umysły ścisłe mogą bowiem fabrykować pewne rzeczy, ale do stworzenia doskonałej gry potrzeba dużej dawki specyficznych emocji i tych właśnie dostarczają głowy z bardziej rozwiniętą prawą półkulą mózgu.
Powyższe wydaje się zgadzać, ale nie nakręcajmy się – tworzenie gier to ani nie rozszczepianie atomów, ani budowanie windy kosmicznej, ani też inny rocket science; jest to sposób na dobrą zabawę w relatywnie poważnym biznesie. Zupełnym szczęściem, nikt poza nami, twórcami gier, i garścią uświadomionych inwestorów, nie ma w naszym kraju pojęcia, na czym ów biznes polega; jesteśmy w stu procentach pewni, że między innymi dlatego tak wspaniale sie rozwijamy. Polscy programiści należą do światowej czołówki i są rozchwytywani przez zagraniczne studia deweloperskie, z których ofert skwapliwie korzystają.
O co nam zatem chodzi, tym, którzy dzielą się wiedzą o grach?
Chcemy przyczynić się do wyłonienia jak najbardziej liczebnej grupy programistów gier i zarazić ją niezbywalnym entuzjazmem do ich tworzenia, do czego, w co chcemy wierzyć, przyczyni się niniejsza książka. Książka, która nauczy, jak w elegancki i twórczy sposób wykorzystać Box2D!
1.1. Dla kogo jest ta książka?
Warunkiem sine qua non do przystąpienia do niniejszej publikacji jest zgłębienie ze zrozumieniem Philosophiæ Naturalis Principia Mathematica⁵ Sir Issaca Newtona.
Powyższe zdanie należy potraktować jako hiperboliczny żart, ponieważ autorom (jak i, na pocieszenie, wielu przed nimi) się to nie udało. Tak, czy inaczej – ciekawa, klasyczna pozycja na samotne, mroźne wieczory. A zatem warunkiem sine qua non do przystąpienia do niniejszej publikacji jest szczera chęć czytelnika, który zetknął się wcześniej z językami programowania i zna podstawy fizyki.
Zależało nam, aby niniejszy podręcznik nie został jałowym materiałem referencyjnym, dlatego zdecydowaliśmy się na konwencję niemalże interaktywną z Czytelnikiem: wychodząc od podstawowej funkcjonalności silnika Box2D, poprowadzimy Cię do stworzenia solidnego prototypu pełnokrwistej gry mobilnej⁶. Zanim jednak wyciągniemy rękę, potrzebujemy, abyś uznał, że znasz język C++ w stopniu podstawowym. Przez stopień podstawowy rozumiemy: znajomość klas, funkcji, zmiennych, tablic i pętli. Wskaźniki Ci darujemy. Jeżeli któraś z wymienionych kwestii z jakiegoś powodu pozostaje nieostra, albo chwilowo wypadła Ci z pamięci, to zawsze możesz sięgnąć do internetu bądź Dodatku 1. na końcu książki.
1.2. Dlaczego Box2D?
Odpowiedź na to pytanie jest prosta: bo jest łatwy, lekki i działa. Łatwy, czyli i Ty, Czytelniku, dasz sobie z nim radę. Lekki, czyli z powodzeniem udźwignie go przeciętny smartfon dostępny za 1 PLN w abonamencie. No i wreszcie świetnie działa, biorąc odpowiedzialność za całą fizykę w naszej grze.
Box2D jest silnikiem implementującym fizykę ciała sztywnego, z którą zapoznamy się bliżej w rozdziale 2.2; przy obranej przez nas klasie gier można zaryzykować twierdzenie, że Box2D wyznacza tzw. industry standard. Jaką klasę mamy na myśli? Odpowiedzią będzie fragment dialogu, który odbył się między panami: Erinem Catto i Peterem Vesterbacką:
Erin: Cześć Peter, mógłbyś mi powiedzieć jakiego silnika fizycznego używa Angry Birds?
Peter: Box2D.
Erin: Świetnie. Rozważyłbyś umieszczenie „Box2D” w sekcji credits waszej gry?
Peter. Pewnie.
Erin: Dzięki! Przy okazji, nazywam się Erin Catto i jestem twórcą Box2D.
Biorąc pod uwagę, że ok. 50% ziemskiej populacji wie, co to jest Angry Birds, lepszego punktu odniesienia nie było sensu szukać.
Box2D, jak sam sugeruje, nadaje się do gier 2D, czyli dwuwymiarowych (od „2-dimensional”). Gry 2D przeżywają obecnie mały renesans za sprawą rozmaitych urządzeń przenośnych, których moc obliczeniowa i wykorzystanie baterii do niedawna jeszcze nie pozwalały na wyrenderowanie przyzwoitej sceny trójwymiarowej. Dodatkowym czynnikiem jest obecność smartfona w co drugiej polskiej kieszeni, co spowodowało mimowolne zainteresowanie się grami przez ludzi preferujących innego rodzaju rozrywki (tzw. gracze każualowi⁷).
Box2D nie jest jedynym rozwiązaniem w dziedzinie fizyki wspomagającym tworzenie gier – w tab. 1.1 są podane inne silniki fizyczne, definiujące standardy techniczne w naszej branży; warto rzucić na nią okiem chociażby po to, aby porównać, jakiej rangi gry ze sobą niosą.
Tabela 1.1. Najpopularniejsze silniki fizyczne stosowane w grach
+---------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------+
| Engine | Developer | Opis | Odpowiedzialny za (m.in): |
+---------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------+
| Chipmunk2D | Scott Lembcke i in. | dwuwymiarowy silnik wobec ciał sztywnych; napisany w języku C, przez co charakteryzuje się arytmetyką proceduralną | Dungeon Defense |
| | | | |
| | | | Waking Mars |
| | | | |
| | | | Feed Me Oil |
+---------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------+
| Box2D | Erin Catto | o nim jest ta książka | Angry Birds |
| | | | |
| | | | Limbo |
| | | | |
| | | | Cat on a Diet |
+---------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------+
| Bullet | Erwin Coumans i in. | silnik trójwymiarowy, implementujący fizykę ciała sztywnego jak i deformowalnego⁸; używany również w filmach | Sonic the Hedgehog |
| | | | |
| | | | Deus Ex |
| | | | |
| | | | Grand Theft Auto IV/V |
+---------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------+
| Open Dynamic Engine (ODE) | Russell Smith | silnik trójwymiarowy, składa się z dwóch głównych modułów; pierwszy implementuje fizykę ciała stałego, drugi jest odpowiedzialny za wykrywanie kolizji; chętnie stosowany w robotyce | World of Goo |
| | | | |
| | | | Mario Strikers Charged |
| | | | |
| | | | Dead Island |
| | | | |
| | | | |
+---------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------+
| Havok | Havok | wieloplatformowy, złożony middleware⁹, zawierający prócz rigid body i soft body moduły sztucznej inteligencji, animacji i inne | Alan Wake |
| | | | |
| | | | Skyrim |
| | | | |
| | | | Wiedźmin 2 |
+---------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------+
| PhysX | NVIDIA Corporation (obecnie) | wieloplatformowy, podobnie jak Havok o szerokim zakresie funkcjonalności, wszak liczony przez procesor graficzny, a nie główny | Mirror’s Edge |
| | | | |
| | | | Batman: Arkham Asylum |
| | | | |
| | | | Wiedźmin 3 |
+---------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------+
Większość z wymienionych stała się integralną częścią syntetycznych systemów wspomagających tworzenie gier, tzw. game engines (rys. 1.1).
Jak widać, silnik gry to całkiem złożona sprawa; w obecnych czasach korzysta się raczej z istniejących rozwiązań niż tworzy nowe od zera. Przypuszczalnie, gdybyśmy zabrali się za napisanie samego tylko odpowiednika Box2D, to po ukończonym zadaniu zastałaby nas nowa generacja konsol gier wideo, czyli spóźnilibyśmy się na pociąg. Na szczęście nie musimy tego robić.
Rysunek 1.1. Przykładowa struktura silnika gry
1.3. Platformy docelowe
Box2D można obecnie podpiąć w zasadzie pod wszystko, począwszy od aplikacji Windows/Mac/Linux, przez iOS i Android, aż do Flasha i WWW (rys. 1.2). Wspomniana wcześniej gra Angry Birds słusznie sugeruje wszak, że naszą platformą docelową będzie urządzenie mobilne.
Rysunek 1.2. Możliwości zastosowania silnika Box2D
Jeżeli jako deployment target obierzesz, Czytelniku, smartfon, masz potencjalnie największą szansę na propagację swojej gry w obowiązującej obecnie sytuacji rynkowej najbliższej nam branży. Jako że spędziliśmy z urządzeniami tego typu bodaj najwięcej czasu zawodowego, stojąca u Twego progu wiedza będzie z pierwszej ręki. Zanim jednak obierzemy właściwy target w rozdziale 5, skonfigurujemy tzw. generic environment, w którym odbędziemy uniwersalne manewry w zakresie Box2D. Owe training grounds będą optymalnym punktem wyjścia w kierunku dowolnie obranej platformy; my udamy się w stronę platform mobilnych.
1.4. Materiały uzupełniające
W rozszerzeniu kontekstu zagadnień, o które ociera się nasza książka (rys. 1.3), pomoże indywidualne zgłębienie pozycji z poniższej listy:
• Dowolna książka do nauki języka C++. My zaczęliśmy kiedyś od C++ w 48 godzin Adama Majczaka.
• Dowolna książka do nauki OpenGL. Polecamy aktualne wydanieOpenGL Programming Guide: The Official Guide to Learning OpenGL.
• “iOS App Programming Guide” – dokument z oficjalnego programu deweloperskiego Apple.
• Android NDK: Beginners Guide Sylvaina Ratabuila. Książka porusza programowanie aplikacji natywnych (C++) na platformę Android, w odróżnieniu od aplikacji opartych na warstwie Java.
• Tricks of the Windows Game Programming Gurus André LaMothe’a. Mimo tendencyjnego tytułu i obranej platformy, zawarta tam wiedza o pisaniu gier jest uniwersalna.
Rysunek 1.3. Zagadnienia powiązane z Box2D w naszej książce