Wiem, że ten post jest dość stary, ale nie mogłem się oprzeć.
Niedawno zbudowałem silnik gry. Wykorzystuje biblioteki stron 3D do renderowania i fizyki, ale napisałem główną część, która definiuje i przetwarza byty i logikę gry.
Silnik z pewnością stosuje tradycyjne podejście. Istnieje główna pętla aktualizacji, która wywołuje funkcję aktualizacji dla wszystkich jednostek. Kolizje są zgłaszane bezpośrednio przez jednostki oddzwaniania. Komunikacja między jednostkami odbywa się za pomocą inteligentnych wskaźników wymienianych między jednostkami.
Istnieje prymitywny system komunikatów, który przetwarza tylko niewielką grupę jednostek w celu przesyłania komunikatów. Te wiadomości są lepiej przetwarzane pod koniec interakcji w grze (na przykład tworzenie lub zniszczenie bytu), ponieważ mogą zepsuć się z listą aktualizacji. Pod koniec każdej pętli gry zużywa się niewielka lista wiadomości.
Mimo prymitywnego systemu komunikatów powiedziałbym, że system jest w dużej mierze „oparty na pętli aktualizacji”.
Dobrze. Po użyciu tego systemu uważam, że jest on bardzo prosty, szybki i dobrze zorganizowany. Logika gry jest widoczna i zamknięta w bytach, a nie dynamiczna jak w quewe wiadomości. Naprawdę nie chciałbym, aby zdarzenia były sterowane zdarzeniami, ponieważ moim zdaniem systemy zdarzeń wprowadzają niepotrzebną złożoność do logiki gry i sprawiają, że kod gry jest bardzo trudny do zrozumienia i debugowania.
Ale myślę też, że czysty system oparty na pętli aktualizacji, taki jak mój, również ma pewne problemy.
Na przykład: W niektórych momentach jedna istota może znajdować się w stanie „nic nie rób”, może czekać na zbliżającego się gracza lub coś innego. W większości tych przypadków jednostka spala czas procesora za darmo i lepiej jest ją wyłączyć i włączyć, gdy nastąpi określone zdarzenie.
Więc w moim następnym silniku gry zamierzam przyjąć inne podejście. Podmioty zarejestrują się do operacji silnika, takich jak aktualizacja, rysowanie, wykrywanie kolizji i tak dalej. Każde z tych zdarzeń będzie miało osobne listy interfejsów encji dla rzeczywistych encji.