Я думаю о создании сетевой многопользовательской игры в Node.js. Это означает, что я буду использовать один и тот же язык в бэкэнд и в интерфейсе. Это было бы в реальном времени и около 20 человек в каждой комнате, поэтому у меня есть несколько соображений:
-
Как мне компенсировать задержку среди всех пользователей, чтобы каждый видел то же самое в одно и то же время? Я думаю отслеживать среднее время пинга каждого игрока, находить самый медленный и информировать других клиентов того времени (в миллисекундах), что их нужно откладывать каждый, чтобы каждый был как можно более синхронизирован.
-
Я подумываю запустить код игры как в бэкэнде, так и во внешнем интерфейсе (так как это JavaScript на обоих концах) и просто имеет механизм коррекции ошибок для синхронизации с "реальной игрой" в бэкенд. Таким образом, игра должна плавно работать на интерфейсе и с небольшим количеством сбоев при синхронизации. Кроме того, это позволит свести к минимуму хакерство JavaScript с интерфейсом, поскольку мошенники будут синхронизированы с бэкэнд-игрой.
-
Должен ли я получать действия с игроком через сокет (нажатия клавиш), информировать всех других клиентов о действиях других игроков и в среднем "играть" игру в бэкэнд и отправлять информацию синхронизации всем пользователям игровое состояние каждый раз, чтобы синхронизировать их?
Как вы думаете? Есть ли еще что-то, на что я должен обратить внимание?
Пожалуйста, размещайте любые мысли или ссылки на документацию или статьи, касающиеся многопользовательских игр.
EDIT: они полезны:
- Gaffer on Games - Очень хорошие статьи Гленна Фидлера по многопользовательской сетевой игре и физике.
- Сетевая модель Quake3