Дизайн и логика клиент-серверных сетевых игр

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

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

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

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

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

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

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

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

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


person hlim    schedule 25.03.2012    source источник


Ответы (1)


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

mySocket.setTcpNoDelay(true);

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

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

person Alle    schedule 06.04.2012