Tradycyjny projekt gry , tak jak ja to wiem, wykorzystuje polimorfizm i funkcje wirtualnych do aktualizacji gry objects stany. Innymi słowy, ten sam zestaw funkcji wirtualnych jest wywoływany w regularnych odstępach czasu (np. Na klatkę) na każdym obiekcie w grze.
Niedawno odkryłem, że istnieje inny system przesyłania wiadomości sterowany zdarzeniami, który umożliwia aktualizowanie stanów obiektów gry. W tym przypadku obiekty zwykle nie są aktualizowane dla poszczególnych klatek. Zamiast tego budowany jest wysoce wydajny system powiadamiania o zdarzeniach , a obiekty gry są aktualizowane tylko po otrzymaniu prawidłowego komunikatu o zdarzeniu.
Architektura gier sterowana zdarzeniami jest dobrze opisana w: Game Coding Complete autorstwa Mike'a McShaffry'ego .
Czy mogę prosić o pomoc w następujących kwestiach:
- Jakie są zalety i wady obu podejść?
- Gdzie jest jedno lepsze od drugiego?
- Czy projektowanie gier oparte na zdarzeniach jest uniwersalne i lepsze we wszystkich obszarach? Czy jest zatem zalecany do stosowania nawet na platformach mombile?
- Który jest bardziej wydajny, a który trudniejszy do opracowania?
Aby wyjaśnić, moje pytanie nie dotyczy całkowitego usunięcia polimorfizmu z projektu gry. Chcę po prostu zrozumieć różnicę i czerpać korzyści z używania komunikatów sterowanych zdarzeniami w porównaniu do zwykłych (na ramkę) wywołań funkcji wirtualnych w celu aktualizacji stanu gry.
Przykład: To pytanie wywołało tutaj trochę kontrowersji, więc dam wam przykład: Według MVC silnik gry jest podzielony na trzy główne części:
- Warstwa aplikacji (komunikacja sprzętu i systemu operacyjnego)
- Logika gry
- Widok gry
W grze wyścigowej Game View odpowiada za renderowanie ekranu tak szybko, jak to możliwe, co najmniej 30 klatek na sekundę. Widok gry nasłuchuje również danych gracza. Teraz tak się dzieje:
- Gracz naciska pedał paliwa do 80%
- GameView konstruuje komunikat „Pedał paliwa samochodu 2 wciśnięty do 80%” i wysyła go do Game Logic.
- Game Logic odbiera komunikat, ocenia, oblicza pozycję i zachowanie nowego samochodu i tworzy następujące komunikaty dla GameView: „Draw Car 2 Fuel Pedal Pressed 80%”, „Car 2 Sound Acceleration”, „Car 2 Coordinates X, Y” .. .
- GameView odbiera wiadomości i odpowiednio je przetwarza
update
je wywołaj ). Drugie, co możesz zrobić z wiadomościami z różnych powodów.