Пошаговая многопользовательская физическая сеть

В настоящее время я планирую 2D-игру для мобильных устройств, которую буду делать на C++ с помощью cocos2d-x. Игра будет пошаговой, и каждый ход будет иметь фазу, в которой будет происходить физическое моделирование. Он также будет кроссплатформенным.

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

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

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

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

Я бы также подумал о реализации собственной физики/обнаружения столкновений.


person ash    schedule 28.02.2012    source источник


Ответы (1)


Если разные устройства не могут запустить симуляцию и получить одинаковые результаты, это исключено. Вы должны запускать сим в одном месте и распространять результаты.

На одном из устройств или на отдельном сервере? Было бы значительно проще реализовать сим на отдельном сервере? Если да, то сделайте это; если нет, то нет смысла задействовать дополнительную машину.

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

person Beta    schedule 28.02.2012