2014-09-15 3 views
-1

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

+1

Короче говоря, магии. В итоге у него много данных. [Вот протокол протокола minecraft, как пример] (http://wiki.vg/Protocol). – Pokechu22

ответ

0

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

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

Для обработки множества типов данных вам потребуется какой-то идентификатор для разделения различных типов информации ... например, операторов switch/if. Это не очень полезно, но ниже приведен пример кода sudo.

if (packetCode == "Players-Health-Change") { 
    player.setHealth(newHealth); 
} else if (packetCode == "Players-Location-Change") { 
    player.setLocation(newLocation); 
} 

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

Полезные ссылки: http://docs.oracle.com/javase/tutorial/networking/sockets/

+0

Задача a) сравнение строк с '==' вместо 'equals' b) Очень маловероятно, что FPS (или любая другая игра, которая должна передавать много данных) использует строки для представления типа данных; Для данных, которые могут быть представлены более компактно (с использованием целочисленного типа данных для представления данных), и времени процессора (выбор правильного случая на основе строки менее эффективен, чем выбор правильного случая) , если данные представлены как число). Но, конечно, общая идея правильная (т. Е. Отправка данных, которые идентифицируют тип информации вместе с данными). – fabian

Смежные вопросы