Традиційний дизайн гри , як я це знаю, використовує поліморфізм і віртуальні функції для поновлення гри об'єктів стану. Іншими словами, один і той же набір віртуальних функцій викликається в регулярних (наприклад: за кадром) інтервалах для кожного об'єкта в грі.
Нещодавно я виявив, що існує інша система обміну повідомленнями, керована подіями, для оновлення станів ігрових об'єктів. Тут об'єкти зазвичай не оновлюються на основі кадру. Натомість будується високоефективна система обміну повідомленнями про події , а ігрові об’єкти оновлюються лише після отримання дійсного повідомлення про подію.
Керована подіями архітектура ігор добре описана в: Кодування гри завершено Майком МакШафрі .
Чи можу я просити про допомогу з наступними питаннями:
- Які переваги та недоліки обох підходів?
- Де один кращий за іншого?
- Чи є дизайн ігор універсальним і кращим у всіх сферах? Тому це рекомендується використовувати навіть на платформах для мобільних телефонів?
- Який з них більш ефективний, а який складніший для розвитку?
Для уточнення, моє питання не в тому, щоб повністю зняти поліморфізм з ігрового дизайну. Я просто хочу зрозуміти різницю та вигоду від використання обміну повідомленнями подій проти звичайних (за кадром) дзвінків до віртуальних функцій для оновлення ігрового стану.
Приклад: Це запитання викликало тут трохи суперечок, тому дозвольте запропонувати вам приклад: За даними MVC, ігровий движок розділений на три основні частини:
- Прикладний рівень (апаратне забезпечення та ОС)
- Логіка гри
- Перегляд гри
У гоночній грі Game View відповідає за максимально швидке відображення екрана, принаймні 30 кадрів в секунду. Game View також слухає дані гравця. Зараз це відбувається:
- Гравець натискає педаль палива до 80%
- GameView створює повідомлення "Нагнітається паливна педаль автомобіля до 80%" і надсилає її до Game Logic.
- Game Logic отримує повідомлення, оцінює, обчислює положення та поведінку нового автомобіля та створює такі повідомлення для GameView: "Намалюйте педаль палива для автомобіля 2 на 80%", "Прискорення звуку автомобіля 2", "Координати автомобіля 2 X, Y". .
- GameView отримує повідомлення та обробляє їх відповідно
update
до них). Друге, що ви можете зробити з повідомленнями з різних причин.