Architektura gier komputerowych na wybranych przykładach Krzysztof Rosiński
Agenda Pong podstawowe moduły gry
Agenda Pong podstawowe moduły gry. Reprezentacja obiektów.
Agenda Pong podstawowe moduły gry. Reprezentacja obiektów. Czas czyli while(true)... ;
Agenda Pong podstawowe moduły gry. Reprezentacja obiektów. Czas czyli while(true)... ; Rozbudowa architektury.
Agenda Pong podstawowe moduły gry. Reprezentacja obiektów. Czas czyli while(true)... ; Rozbudowa architektury. Podsumowanie.
Mechanika gry: Pong - analiza
Mechanika gry: Pong - analiza
Pong - analiza Elementy gry: Paletka.
Pong - analiza Elementy gry: Paletka. Piłka.
Pong - analiza Elementy gry: Paletka. Piłka. Punktacja.
Pong - analiza Mechanika gry: Poruszanie paletkami.
Pong - analiza Mechanika gry: Poruszanie paletkami. Odbijanie piłki
Pong - analiza Mechanika gry: Poruszanie paletkami. Odbijanie piłki. Naliczanie punktów.
Pong - analiza Moduły gry: Sterowanie (InputManager).
Pong - analiza Moduły gry: Sterowanie. Wyświetlanie (Renderer).
Pong - analiza Moduły gry: Sterowanie. Rendering. Kolizje (CollisionManager).
Pong - analiza Moduły gry: Sterowanie. Rendering. Kolizje. Zasoby (ResourceManager).
Pong - analiza Moduły gry: Sterowanie. Rendering. Kolizje. Zasoby. Heads-Up-Display (HUD).
Pong - analiza Moduły gry: Sterowanie. Rendering. Kolizje. Zasoby. Heads-Up-Display (HUD). Reprezentacja obiektów.
Reprezentacja Obiektów Obiekt: Pozycja (Vector 2D).
Reprezentacja Obiektów Obiekt: Pozycja (Vector 2D). Reprezentacja graficzna (tekstura).
Reprezentacja Obiektów Obiekt (Sprite): Pozycja (Vector 2D). Reprezentacja graficzna (tekstura).
Reprezentacja Obiektów GameObject: Sprite. InputListener
Reprezentacja Obiektów GameObject: Sprite. InputListener: Rejestracja w InputManager przy utworzeniu.
Reprezentacja Obiektów GameObject: Sprite. InputListener: Rejestracja w InputManager przy utworzeniu. Wystawia event na zdarzenie inputu.
Reprezentacja Obiektów GameObject: Sprite. InputListener. Collider.
Reprezentacja Obiektów GameObject: Sprite. InputListener. Collider: OnEnter(Collider other) OnExit(Collider other) OnStay(Collider other)
Reprezentacja Obiektów GameObject: Sprite. InputListener. Collider. Controller.
Reprezentacja Obiektów GameObject: Sprite. InputListener. Collider. Controller: Reakcja na input.
Reprezentacja Obiektów GameObject: Sprite. InputListener. Collider. Controller: Reakcja na input. Implementacja zachowania.
Reprezentacja Obiektów PaletkaObject: Sprite. InputListener. Collider. PlayerController: Reakcja na input. Implementacja zachowania.
Reprezentacja Obiektów PilkaObject: Sprite. InputListener. Collider. PilkaController: Reakcja na input. Implementacja zachowania.
Reprezentacja Obiektów PilkaObject: Sprite. InputListener. Collider. PilkaController: Reakcja na kolizję. Implementacja zachowania. Prędkość, przyspieszenie.
Modules + GameObjects = Game?
Modules + GameObjects Game
Modules + GameObjects + Time = Game
Main Game Loop Główna pętla gry: Odświeżenie stanu gry.
Main Game Loop Główna pętla gry: Odświeżenie stanu gry. Update(TimeInterval deltatime)
Main Game Loop Główna pętla gry: Odświeżenie stanu gry. Update(float deltatime)
Main Game Loop Główna pętla gry: Odświeżenie stanu gry. Update(float deltatime)
Main Game Loop Główna pętla gry: Odświeżenie stanu gry. Update(float deltatime) deltatime = currentframetime - prevframetime
Main Game Loop Główna pętla gry: Update(float deltatime) Zmiany uzależnione od czasu.
Main Game Loop Główna pętla gry: Update(float deltatime) Zmiany uzależnione od czasu. Niezależność od urządzenia. Iterfejs IUpdatable.
Main Game Loop Główna pętla gry: Update(float deltatime) Zmiany uzależnione od czasu. Niezależność od urządzenia. Iterfejs IUpdatable. Kolekcja obiektów typu IUpdatable.
Main Game Loop Główna pętla gry: Update(float deltatime) Zmiany uzależnione od czasu. Niezależność od urządzenia. Iterfejs IUpdatable. Kolekcja obiektów typu IUpdatable. Moduły, Managery.
Main Game Loop Główna pętla gry: Update(float deltatime) Zmiany uzależnione od czasu. Niezależność od urządzenia. Iterfejs IUpdatable. Kolekcja obiektów typu IUpdatable. Moduły, Managery. GameObjecty.
Main Game Loop Główna pętla gry: Update(float deltatime) Zmiany uzależnione od czasu. Niezależność od urządzenia. Iterfejs IUpdatable. Kolekcja obiektów typu IUpdatable. Moduły, Managery. GameObjecty. Inne.
Main Game Loop Dlaczego nie tak: List<IUpdatable> updatecollection;... foreach(iupdatable element in updatecollection) Element.Update(deltaTime);
Main Game Loop Dlaczego nie tak: List<IUpdatable> updatecollection;... foreach(iupdatable element in updatecollection) Element.Update(deltaTime); Zależności pomiędzy modułami.
Main Game Loop Dlaczego nie tak: List<IUpdatable> updatecollection;... foreach(iupdatable element in updatecollection) Element.Update(deltaTime); Zależności pomiędzy modułami. Opóźnienie jednej klatki. Niestabilność systemu.
Main Game Loop while(true) { collisionmanager.update(dt); inputmanager.update(dt); gameobjectsmanager.update(dt); soundmanager.update(dt); rendermanager.draw(); sleep(t); }
Rozbudowa architektury Może by tak ptaki... z procy... w świnie...;)
Rozbudowa architektury Może by tak ptaki... z procy... w świnie...;)
Rozbudowa architektury Nowe elementy (PongBirds):
Rozbudowa architektury Nowe elementy (PongBirds): Wiele poziomów (levele).
Rozbudowa architektury Nowe elementy (PongBirds): Wiele poziomów (levele). Symulacja fizyki.
Rozbudowa architektury Nowe elementy (PongBirds): Wiele poziomów (levele). Symulacja fizyki. Zapis stanu gry.
Rozbudowa architektury Potrzebne moduły: Scena
Rozbudowa architektury Potrzebne moduły: Scena Logicznie grupuje obiekty gry.
Rozbudowa architektury Potrzebne moduły: Scena Logicznie grupuje obiekty gry. Implementuje logikę danego fragmentu gry.
Rozbudowa architektury Potrzebne moduły: Scena Logicznie grupuje obiekty gry. Implementuje logikę danego fragmentu gry. Wczytuje wszystkie potrzebne elementy.
Rozbudowa architektury Potrzebne moduły: Scena Logicznie grupuje obiekty gry. Implementuje logikę danego fragmentu gry. Wczytuje wszystkie potrzebne elementy. OnActivate() OnDeactivate()
Rozbudowa architektury Potrzebne moduły: Scena SceneManager.
Rozbudowa architektury Potrzebne moduły: Scena SceneManager: Przejścia pomiędzy scenami.
Rozbudowa architektury Potrzebne moduły: Scena SceneManager: Przejścia pomiędzy scenami. Kurtyna, loading screeny.
Rozbudowa architektury Potrzebne moduły: Scena SceneManager. PhysicsManager: Symulacja fizyki ciała sztywnego. Wspólpraca z CollisionManager.
Rozbudowa architektury Potrzebne moduły: Scena SceneManager. PhysicsManager. Serializacja/Deserializacja: Dane sceny (xml, binarnie, dowolnie)
Rozbudowa architektury Potrzebne moduły: Scena SceneManager. PhysicsManager. Serializacja/Deserializacja. SaveManager.
Rozbudowa architektury Potrzebne moduły: Scena SceneManager. PhysicsManager. Serializacja/Deserializacja. SaveManager: Zapis stanu gry.
Rozbudowa architektury Potrzebne moduły: Scena SceneManager. PhysicsManager. Serializacja/Deserializacja. SaveManager: Zapis stanu gry. Zabezpieczenia.
Rozbudowa architektury Potrzebne moduły: Scena SceneManager. PhysicsManager. Serializacja/Deserializacja. SaveManager: Zapis stanu gry. Zabezpieczenia.
Rozbudowa architektury Potrzebne moduły: Kamera.
Rozbudowa architektury Potrzebne moduły: Kamera: GameObject (pozycja, predkość, fizyka).
Rozbudowa architektury Potrzebne moduły: Kamera: GameObject (pozycja, predkość, fizyka). CameraController.
Rozbudowa architektury Potrzebne moduły: Kamera: GameObject (pozycja, predkość, fizyka). CameraController. Współpraca z rendererem.
Podsumowanie Managers Renderer Device Input Game Components Game Logic Game Output Sound Resource Manager Textures 3D models Sounds/Music Fonts
krzysztof.rosinski@ansharstudios.com www.ansharstudios.com