cocos2d x — многопользовательская игра на C ++ с использованием ENet / Cocos2dx

Я новичок в сетевых и многопользовательских играх в целом, поэтому я попытался войти в эту область как вызов и узнать больше об этом. Поэтому я решил сделать свою готовую игру, которая построена на многопользовательском режиме cocos2dx. Я создал серверную сторону, используя enet, и в основном я делаю то, что я посылаю скорость и позицию.
То, что я заметил, что синхронизация не очень совершенная, я искал в Google, некоторые говорят, что мы должны делать физическую логику на стороне сервера, поэтому мой вопрос:
Как я могу идеально синхронизировать движения между клиентами?
Если, занимаясь физикой на стороне сервера, как я могу это сделать, например?
Я использую физический движок Box2D (встроенный в cocos2dx)

Спасибо за чтение извините за орфографические ошибки

-2

Решение

Если вы играете несколько экземпляров коммерческой сетевой игры AAA бок о бок, вы заметите, что они тоже не идеально синхронизированы.

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

Один из методов, который часто используется, это «мертвый расчет», который означает, что вы экстраполируете движение сущностей на основе их последней известной доверенной позиции и скорости (и, возможно, ускорения).
Когда вы получаете обновление с фактическим состоянием сущности, вы обновляете состояние ваших сущностей.
Это добавляет еще один уровень сложности: вы не хотите, чтобы вещи телепортировались, поэтому вам также необходимо интерполировать между вашим экстраполированным состоянием и обновленным состоянием.

Чтобы избежать мошенников, вы также должны сделать сервер ответственным за то, как выглядит мир, и отправить свои входные данные — нажатия клавиш, движения мыши, … — на сервер вместо физического состояния и делать все расчеты как на сервере, так и на клиентах.
(Не только сервер, потому что вам нужно приближать мир, пока сервер определяет «правду».)

Если вы сейчас думаете «но это означает, что состояние мира у разных игроков разное», вы правы.
На самом деле это не имеет значения — поскольку очень редко два игрока смотрят одну и ту же вещь бок о бок, вам нужен только мир, чтобы появиться правдоподобный каждому.
То, что вам нужно сделать на практике, чтобы сделать мир правдоподобным, зависит от вашей игры (пошаговая стратегическая игра не так чувствительна к временным сбоям, как быстро развивающийся FPS), как и то, какие комбинации вы можете использовать, не разрушая иллюзию ,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]