Ці кроки, які ви згадуєте, найімовірніше, здійснюються в окремих двигунах. Просто у простих ігрових двигунів їх зазвичай за один прохід. Ваша послідовність
for each object
do physics
do game logic
draw
стає
call physics subsystem
call game logic subsystem
call drawing subsystem
Фізичний двигун піклується про положення та розміри.
Game Logic Engine піклується про інтерпретацію того, що Physics Engine змінив (він міг перешкоджати деяким шляховим точкам ...), які цілі мають персонажі та яку поведінку вони повинні робити , він виконує заплановані сценарії (ця функція думки ).
Drawing Engine малює, які об’єкти видно, і він знає, які об’єкти видно, тому що двигуни Quake тут накручують (див. Розділ Малюнок).
Моя рада вам - скоріше вивчити, як проводяться моделювання, а не ігрові двигуни. Існує величезна поп-культура, що стосується розробки ігор, ігрові двигуни робляться на необхідних мовах (через традиції та швидкість); тож мені було більш просвітлено отримати хороші підручники (скоріше теорію), а потім дивитись на двигуни (практика), а не дивитися на двигуни та головоломки годинами, як вони це робили.
Фізика
Ціле поняття про повторення всіх сутностей і, напевно, подумайте, малюйте}, можливо, призведе до проблем. Будуть конфлікти тощо. Я вірю, що Valve має Havok, і я думаю, що Havok піклується про достатньо правильну фізику.
Подумайте
Подумайте функція запускається , коли час в грі дорівнює часу в nextthink . Це працює таким чином у двигуні Quake, а двигун Quake є основою для двигунів Half Life. Він НЕ запускається кожного разу.
Внутрішньо це повинно бути простою ітерацією за допомогою списку сутностей і перевірки, чи минув час для виклику функції думки. Часова складність буде O (N), де N - кількість сутностей.
Якщо існує дуже велика кількість сутностей, слід виміряти, наскільки це покращить кадр в секунду. Зауважте, що через закон Амдала це потенційно невидима швидкість. Я маю на увазі, ви просто повторіть усі предмети і зменшіть & перевірити одне число.
Я б пришвидшив його шляхом сортування сутностей по nextthink (створити список покажчиків на сутності та сортувати його кожен раз; не масив сутностей, тому що сутності можуть змінити наступне мислення в будь-який час, тому їх перестановка в масиві приймає O (N) замість O ( 1) у списку).
Слід також переглянути планувальник O (1) в Linux .
Малюємо
Двигун малює те, що приблизно видно з області, на якій знаходиться камера. Рівень гри - це розділення на дерево, а область - лист цього дерева. Я не заважатиму вам про деталі про нього ... Тож якщо сутність видима, її кладуть у набір видимих сутностей і вони малюються.
Вони зберігають, які зони є потенційно видимими. Його називають "потенційно видимим набором", PVS - коротким. Існує візуалізація PVS , зелена капсула грає і навколо нього виводиться те, що містить його PVS.
<some commercial engine>
це відбувається?