Дизайн и логика для клиент-серверных сетевых игр - PullRequest
1 голос
/ 25 марта 2012

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

Клиент отправляет движение клавиш на сервер.

Сервер принимает ввод, обновляет состояние, вычисляет и возвращает новую позицию клиенту

Клиент получает новую позицию и обновляет экран.

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

Кто-нибудь может предложить хороший дизайн для сетевой игры?

Нужно ли делать ранний прогноз?

Нужен ли отдельный поток для извлечения данных и отображения экрана?

P.S. Это мой первый раз, когда я создаю сетевую игру, поэтому я понятия не имею, что я делаю.

1 Ответ

0 голосов
/ 06 апреля 2012

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

mySocket.setTcpNoDelay(true);

Эта опция решила мои проблемы с задержкой, когда я отправлял координаты в реальном времени по сети.

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

...