Припустимо, у вас є гра, в якій є багато (багато багатьох) сутностей, які виконують деякі функції, не всі з яких постійно потрібні або потребують врахування в кожному кадрі. Конкретна проблема, над якою я працюю, в якій існує це питання, - детальне моделювання організму, включаючи його органи.
У грі у кожної істоти є своє тіло, яке розділено на менші частини (тулуб, ноги тощо), а іноді ці частини містять органи, які виконують певну функцію в організмі. Незалежно від того, незалежно від того, чи працює орган в даний час чи ні, він ніколи фактично не з'ясовується. Зрештою, тварина може мати порожній шлунок, тому не потрібно нічого перетравлювати. Було б досить смішно перевіряти або моделювати кожен об'єкт у кожному кадрі, і це дуже дорого, як тільки у вас є багато істот у світі. Тож я думав про спосіб розумно розмежувати об’єкти, які потрібно оновити, і ті, які не мають.
Те, що я придумав, здається принаймні нормальним рішенням. Він створює просту чергу / стек (важливо, щоб кожен елемент видалявся, як тільки його читали; порядок не має значення) називається "стеком уваги", де знаходяться об'єкти, які потрібно імітувати. Об'єкти, які потребують уваги, просто поставлять себе на стек або кладуть туди інші об’єкти. Ці об'єкти, ймовірно, реалізують простий інтерфейс із функцією simulate ().
Якщо застосувати до мого попереднього прикладу травлення, це означатиме:
Гравець вибирає щось з їжі (припустимо, це хліб) з інвентарю і кладе його в рот свого персонажа, а рот кладеться на стек уваги. У наступному кадрі рот виймається зі стека і називається його імітація () - функція. Оскільки це рот, було б розумно імітувати жування тут. Це може продовжуватися протягом декількох кадрів, в яких рот продовжує ставити себе на груди, поки не вирішить, що їжа готова проковтнути. У цьому випадку рот кладе жувальний хліб в шлунок (я знаю, що він не йде туди безпосередньо, але стравохід залишається для спрощення), який потім також ставиться на стеку уваги. У наступному кадрі розпочато моделювання процесу травлення. І так далі для решти необхідних органів.
Передбачуваною проблемою цього є об'єкти, що працюють на холостому ходу. Спляча тварина є хорошим прикладом цього. Це можна зробити так, як описано раніше, тримаючи сплячу тварину на штабелі і перевіряючи кожен раз, чи потрібно їй прокидатися, але це здається марнотратним, оскільки це єдине, що робиться. Щоб зробити об'єкти простою більш ефективними, я планував додати такий графік, в якому зберігаються завдання, які слід виконувати в певний час. Якщо тварина лягає спати, вона покладе роботу на той графік, який був би запланований на певний час після того, як тварина лягла спати. Після цього ця робота допоможе знову поставити сплячу тварину на стек. Тепер, ви можете сказати, що спляча тварина, яка не знаходиться на степі уваги, може пропустити напад на щось, тому що її ШІ не моделюється,
Зараз я, чесно кажучи, не знаю, чи це навіть близько до елегантного рішення цієї проблеми через брак досвіду. Я близький до чогось корисного? Як це зазвичай робиться чи хтось має пропозиції чи кращі рішення?