Упомянутые вами шаги, скорее всего, выполняются в отдельных движках Просто у простых игровых движков их обычно бывает за один проход. Ваша последовательность
for each object
do physics
do game logic
draw
становится
call physics subsystem
call game logic subsystem
call drawing subsystem
Физический двигатель заботится о позициях и размерах.
Game Logic Engine заботится о том, чтобы интерпретировать, что физический движок изменился (он может помешать некоторым путевым точкам ...), какие цели преследуют персонажи и какое поведение они должны выполнять , он запускает запланированные сценарии (эта функция мышления ).
Drawing Engine рисует, какие объекты видимы, и он знает, какие объекты видимы, потому что движки Quake обманывают здесь (см. Раздел Draw).
Мой вам совет - лучше изучить, как выполняются симуляции, а не игровые движки. Существует огромная поп-культура, связанная с разработкой игр, и игровые движки сделаны на императивных языках (из-за традиций и скорости); так что мне было более поучительно получать хорошие учебники (скорее теорию) и ТОГДА смотреть на движки (практика), а не смотреть на движки и ломать голову часами, как они это делали.
физика
Целостное представление об итерациях всех сущностей и их выполнении может привести к проблемам. Будут конфликты и тд. Я верю, что у Valve есть Havok, и я думаю, что Havok заботится о достаточно правильной физике.
Считать
Функция Think запускается, когда время в игре равно времени в следующем разуме . Так работает в движке Quake, а движок Quake является основой для двигателей Half Life. Это НЕ запускается каждый раз.
Внутренне это должна быть простая итерация по списку объектов и проверка, прошло ли время для вызова функции Think. Временная сложность будет O (N), где N - количество объектов.
Если существует очень большое количество объектов, вы должны измерить, насколько это улучшит fps. Обратите внимание, что по закону Амдала это потенциально невидимое ускорение. Я имею в виду, вы просто перебираете все элементы, уменьшаете и проверяете одно число.
Я бы ускорил его, отсортировав сущности по nextthink (создайте список указателей на сущности и сортируйте их каждый раз; не массив сущностей, потому что сущности могут изменить их nextthink в любое время, поэтому для их реорганизации в массиве требуется O (N) вместо O ( 1) в списке).
Вы также должны посмотреть на O (1) планировщик в Linux .
Рисовать
Двигатель рисует то, что приблизительно видно из области, в которой находится камера. Уровень игры - это разбиение на дерево, а область - это лист этого дерева. Я не буду беспокоить Вас подробностями об этом ... Так что, если сущность видима, она помещается в набор видимых сущностей, и они рисуются.
Они хранят, какие области являются потенциально видимыми областями. Это называется «потенциально видимый набор», сокращенно PVS . Есть визуализация PVS , зеленая капсула игрока и вокруг него отображается то, что содержит его PVS.
<some commercial engine>
это?