Kroki, o których wspominasz, najprawdopodobniej są wykonywane w oddzielnych silnikach. Po prostu proste silniki do gier mają je zwykle w jednym przebiegu. Twoja sekwencja
for each object
do physics
do game logic
draw
staje się
call physics subsystem
call game logic subsystem
call drawing subsystem
Silnik fizyki zajmuje się pozycjami i rozmiarami.
Game Logic Engine zajmuje się interpretacją tego, co zmienił silnik fizyki (mógłby utrudnić pewne punkty orientacyjne ...), jakie cele mają postacie i jakie zachowanie powinni robić , uruchamia zaplanowane skrypty (ta funkcja myślenia ).
Silnik rysowania rysuje, które obiekty są widoczne, i wie, które obiekty są widoczne, ponieważ silniki Quake'a oszukują tutaj (patrz sekcja Rysowanie).
Radzę raczej przestudiować, w jaki sposób przeprowadzane są symulacje, a nie silniki gier. Istnieje ogromna popkultura związana z tworzeniem gier, a silniki gier są tworzone w imperatywnych językach (z powodu tradycji i szybkości); więc bardziej pouczające było dla mnie zdobycie dobrych podręczników (raczej teorii) i NASTĘPNIE spojrzenie na silniki (ćwiczenie), a nie patrzenie na silniki i układanki przez wiele godzin, jak to zrobili.
Fizyka
Całe pojęcie iteracji wszystkich bytów i robienia {think, draw} prawdopodobnie doprowadzi do problemów. Będą konflikty i tak dalej. Wierzę, że Valve ma Havoka i myślę, że Havok zajmuje się wystarczająco poprawną fizyką.
Myśleć
Funkcja Think jest uruchamiana, gdy czas w grze jest równy czasowi innemu . Działa w ten sposób w silniku Quake, a silnik Quake jest podstawą dla silników Half Life. NIE jest uruchamiany za każdym razem.
Wewnętrznie powinno to być proste iterowanie po liście podmiotów i sprawdzanie, czy upłynęło czasu na wywołanie funkcji think. Złożoność czasowa będzie wynosić O (N), gdzie N jest liczbą podmiotów.
Jeśli istnieje bardzo duża liczba podmiotów, powinieneś zmierzyć, jak bardzo poprawi to FPS. Zauważ, że z powodu prawa Amdahla jest to potencjalnie niewidzialne przyspieszenie. To znaczy, po prostu iterujesz przez wszystkie elementy, pomniejszasz i sprawdzasz jeden numer.
Przyspieszyłbym to, sortując byty według nextthink (utwórz listę wskaźników do bytów i sortuj je za każdym razem; nie tablicę bytów, ponieważ byty mogą zmienić swoje następne myślenie w dowolnym momencie, więc przestawienie ich w tablicy zajmuje O (N) zamiast O ( 1) na liście).
Powinieneś również spojrzeć na harmonogram O (1) w systemie Linux .
Remis
Silnik rysuje to, co jest w przybliżeniu widoczne z obszaru, w którym znajduje się kamera. Poziom gry to podział na drzewo, a obszar to liść tego drzewa. Nie będę zawracać ci głowy szczegółami na ten temat ... Więc jeśli jednostka jest widoczna, jest umieszczana w zestawie widocznych jednostek i są one rysowane.
Przechowują, które obszary są obszarami potencjalnie widocznymi. Nazywa się to „potencjalnie widocznym zestawem”, w skrócie PVS . Jest wizualizacja PVS , zielona kapsuła jest graczem, a wokół niego renderowana jest zawartość jego PVS.
<some commercial engine>
sposób?