Ну, я знаю, що ця посада досить стара, але я не втримався.
Нещодавно я побудував ігровий двигун. Він використовує бібліотеки 3d-партій для візуалізації та фізики, але я написав основну частину, яка визначає та обробляє сутності та логіку гри.
Двигун, безумовно, дотримується традиційного підходу. Існує головний цикл оновлення, який викликає функцію оновлення для всіх об'єктів. Про зіткнення безпосередньо повідомляється за допомогою зворотного дзвінка на об'єкти. Зв'язок між сутностями здійснюється за допомогою розумних покажчиків, що обмінюються між сутностями.
Існує примітивна система повідомлень, яка обробляє лише невелику групу сутностей для рушійних повідомлень. Ці повідомлення бажано обробити в кінці ігрової взаємодії (наприклад, створення або знищення об'єкта), оскільки вони можуть зіпсуватися зі списком оновлень. Отже, наприкінці кожного циклу гри споживається невеликий список повідомлень.
Незважаючи на примітивну систему повідомлень, я б сказав, що система значною мірою є "циклом оновлення на основі".
Ну. Після використання цієї системи я вважаю, що це дуже просто, швидко і добре організовано. Логіка гри помітна і міститься всередині об'єктів, а не динамічна, як черга повідомлень. Я дійсно не хотів би робити це подіями, тому що, на мій погляд, системи подій вводять зайву складність в логіку гри, і роблять ігровий код дуже важким для розуміння та налагодження.
Але я також думаю, що у чистої системи на основі циклу оновлення, як у мене, є і деякі проблеми.
Наприклад, у деяких моментах одна особа може перебувати у стані "не робити нічого", може чекати гравця, який наближається, або щось інше. У більшості випадків сутність спалює час процесора ні за що, і краще вимкнути сутність і ввімкнути її, коли станеться певна подія.
Отже, у своєму наступному ігровому двигуні я буду використовувати інший підхід. Організації зареєструються для роботи двигуна, як-от оновлення, малювання, виявлення зіткнень тощо. Кожна з цих подій матиме окремі списки інтерфейсів сутності для фактичних сутностей.