2012-04-29 4 views
10

Я просто думаю о возможности Erlang для игрового сервера. (о, я не эксперт Erlang, просто рассматриваю сцену) Это означает использование Actor Model для игрового моделирования. Конечно, наибольшей привлекательностью является его параллелизм, распределенный по нескольким узлам.Модель актера и обнаружение столкновений

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

Хотя обнаружение столкновения по существу требуется в любой игре, но в характере модели Actor, оно не выглядит эффективным и даже не имеет смысла, поскольку ему требуется глобально синхронизированный запрос состояния и обновление по всем участникам таргетинга. И если я использую любую синхронизацию, она отменяет все преимущества модели актера Эрланг.

Конечно, ориентация на актеров за один раз может быть меньше, если я правильно использую разметку пространства, но это просто оптимизация, а не главный ответ. Или это правильный ответ на этот вопрос? Уменьшение диапазона синхронизации за счет уменьшения количества взаимодействующих участников?

ответ

9

Разделите карту на более мелкие части и пусть каждая часть будет ее собственным процессом (вы можете даже разбить ее настолько, что каждая плитка - это собственный процесс). Игрок, пытающийся переместиться, отправит сообщение на фрагмент/подкарту, в котором говорится, что он идет туда, и плитка отвечает, если все в порядке или нет. Это позволяет избежать коллизий, поскольку только одно сообщение обрабатывается плиткой/под-картой за раз. Несколько подвариантов/плиток могут обрабатывать сообщения одновременно, поэтому он все еще является параллельной программой.

+0

Уменьшение диапазона взаимодействия выглядит как единственный способ пойти. Благодарю. – Eonil

7

У меня есть космическая игра, делающая сервер в Эрланге. Хитрость заключается в том, что каждое местоположение/узел/etc также является актером. Он постоянно работает с физикой и регулярно отправляет информацию каждому игроку игрового объекта.

Все становится намного чище, когда вы начинаете думать более абстрактно о том, что такое актер/сущность. Например, столкновения могут быть полноправными участниками. Это делает клиентскую сторону намного проще - привязывает графические и звуковые эффекты к столкновению. На стороне сервера он также делает - предотвращает множественные эффекты столкновения между двумя объектами более одного раза в заданное время.

+0

Итак, все ли физики сделаны в одиночном актере? Как вы сделали физику? – Eonil

+2

Да. Я использую Bullet для запуска физики. Актеры сущности отслеживают свое собственное состояние игры, стреляют друг в друга, определяют движение и т. Д. Они отправляют команды в местоположение, которое запускает симуляции. Место работает непрерывно и периодически отправляет «вы здесь» в сущности и «вы столкнулись с X». Сущности отправляют запросы и в местоположение. – Nialscorva

Смежные вопросы