Как устроен симулятор реального мира? - PullRequest
11 голосов
/ 26 сентября 2008

Я очарован производительностью таких приложений, как "Rollercoaster Tycoon", "The Sims" и FPS игры. Я хотел бы узнать больше об основной архитектуре приложения. (Не касается интерфейса пользователя - я предполагаю, что здесь присутствуют участники MVC / MVP. Также меня не интересует математика и физика.)

Мой главный вопрос касается десятков или сотен отдельных объектов в симуляции (людей, транспортных средств, предметов и т. Д.), Которые все двигаются, принимают решения, поднимают события и реагируют на них - все это кажется одинаковым и как они рассчитаны на такую ​​хорошую производительность.

В: Прежде всего, эти объекты обрабатываются в гигантском цикле, по одному за раз, или каждый объект обрабатывается в своем собственном потоке ? Сколько нитей практично в такой симуляции? (Приблизительная цифра, конечно, 10, 100, 1000)

Я не собираюсь писать игру, я просто хочу теорию дизайна, потому что мне интересно, может ли такой дизайн применяться к другим приложениям, в которых несколько решений принимаются, казалось бы, одновременно.

Ответы [ 5 ]

8 голосов
/ 26 сентября 2008

Существует два основных способа выполнения этого вида моделирования На основе агента и Динамика системы . В симуляции на основе агентов каждая сущность в игре будет представлена ​​экземпляром класса со свойствами и поведением, все взаимодействия между сущностями должны быть явно определены, и когда вы хотите, чтобы эти сущности взаимодействовали, функция называется свойствами из взаимодействующих лиц меняется.

Динамика системы совершенно иная, она имеет дело только с суммами и итогами, в системе нет представления об одном объекте. Самый простой пример этого - модель «Хищник и добыча».

Оба из них имеют свои преимущества и недостатки, подход System Dynamics лучше масштабируется для большого количества прав, сохраняя при этом короткое время выполнения. Хотя существует несколько формул, которые необходимо вычислить, время для расчета не зависит от значений в формуле. Но нет никакого способа посмотреть на отдельную сущность в этом подходе. Подход на основе агентов позволяет размещать объекты в определенных местах и ​​позволяет взаимодействовать с конкретными объектами в моделировании.

автоматы и Celular автоматы - другие способы моделирования систем в игре. Например. в агентном подходе вы можете смоделировать поведение одного агента с помощью FSM. Simcity использовал Celular-автоматы для выполнения имитационной работы.

Как правило, у вас, вероятно, не будет одной большой огромной модели, которая выполняет все, кроме нескольких систем, выполняющих конкретные задачи, некоторые из них не нужно будет обновлять очень часто, например. что-то, что определяет погоду, другие могут нуждаться в постоянных обновлениях. Даже если вы разместите их в отдельных потоках, вы захотите приостановить или запустить их, когда они вам понадобятся. Возможно, вы захотите разделить работу на несколько кадров, например, рассчитывать только обновления на определенное количество агентов.

4 голосов
/ 01 ноября 2008

Исходный код оригинального Simcity был открыт с открытым исходным кодом как Micropolis . Это может быть интересное исследование.

1 голос
/ 26 сентября 2008

До недавнего времени логика и управление игрой были в одном потоке на большом конечном автомате. Однако теперь вы склонны видеть, как различные части игры (аудио, графика, физика, логика «симуляции» и т. Д.) Разделяются на собственные автоматы в потоках.

Редактировать: Кстати, потоки - очень плохой способ заставить вещи в симуляции происходить в одно и то же время - это приводит к условиям гонки. Обычно, когда вы хотите, чтобы все происходило в одно и то же время, вы просто выясняете, что должно произойти, перебирая свои данные и сохраняя их по отдельности, а затем применяете их после обработки всех данных. Ринс, повтори.

0 голосов
/ 26 сентября 2008

В дополнение к опубликованным предложениям, я бы порекомендовал просмотреть тег моделирования в sourceforge. Существуют различные симуляторы проекта на разных уровнях сложности.

Sourceforge

Кроме того, я рекомендую следующую книгу для общего обзора, хотя она сосредоточена на физике, она имеет дело с проблемами моделирования.

Физика для разработчиков игр

0 голосов
/ 26 сентября 2008

@ Коди Брошиус

Этот CodeProject использует Linq для демонстрации этой практики. (Linq to Life)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...