Традиционный дизайн игры , как я это знаю, использует полиморфизм и виртуальные функции для обновления игры объектов состояния. Другими словами, один и тот же набор виртуальных функций вызывается через регулярные (например, за кадр) интервалы для каждого объекта в игре.
Недавно я обнаружил, что существует другая система сообщений, управляемая событиями, для обновления состояний игровых объектов. Здесь объекты обычно не обновляются для каждого кадра. Вместо этого создается высокоэффективная система обмена сообщениями о событиях , и игровые объекты обновляются только после получения действительного сообщения о событии.
Игровая архитектура, управляемая событиями, подробно описана в статье : « Кодирование игр завершено Майком МакШаффри» .
Могу ли я попросить помощи по следующим вопросам:
- Каковы преимущества и недостатки обоих подходов?
- Где одно лучше другого?
- Является ли управляемый событиями игровой дизайн универсальным и лучшим во всех областях? Поэтому рекомендуется для использования даже на мобильных платформах?
- Какой из них более эффективен, а какой сложнее развивать?
Чтобы уточнить, мой вопрос не о том, чтобы полностью удалить полиморфизм из игрового дизайна. Я просто хочу понять разницу и извлечь выгоду от использования событийно-ориентированного обмена сообщениями по сравнению с обычными (для каждого кадра) вызовами виртуальных функций для обновления состояния игры.
Пример: этот вопрос вызвал здесь некоторые противоречия, поэтому позвольте мне привести вам пример: согласно MVC, движок игры разделен на три основные части:
- Уровень приложений (аппаратное обеспечение и связь с ОС)
- Игровая логика
- Просмотр игры
В гоночной игре Game View отвечает за максимально быстрое отображение экрана, по крайней мере, 30 кадров в секунду. Game View также прослушивает вход игрока. Теперь это происходит:
- Игрок нажимает педаль топлива до 80%
- GameView создает сообщение «Педаль топлива 2 нажата до 80%» и отправляет его в Game Logic.
- Game Logic получает сообщение, оценивает, рассчитывает положение и поведение нового автомобиля и создает для GameView следующие сообщения: «Нажата педаль топлива Draw 2, нажато на 80%», «Ускорение звука автомобиля 2», «Координаты автомобиля 2 X, Y» .. ,
- GameView получает сообщения и обрабатывает их соответственно
update
их). Второе вы можете сделать с сообщениями по разным причинам.