С чего начать с сокетов в простой многопользовательской игре JAVA - PullRequest
0 голосов
/ 30 марта 2012

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

Недавно я узнал о том, как загружать спрайты, двойную буферизацию, ключевые прослушиватели, прослушиватели мыши и т. Д. Для создания небольшой боковой скроллера 2d gun game. И я хорошо разбираюсь в этих категориях, но теперь я подошел к той части, где мне нужно узнать о сокетах и ​​тому подобном, чтобы иметь возможность получить эту игру онлайн.

Я видел небольшое руководство по созданию сервера и клиента, и когда клиент был открыт, он отправлял бы сообщение (строку) на сервер, например «Orange», и сервер мог это понять, и печатал это из. Я могу понять код, посмотрев на него (если меня попросят восстановить его из моих собственных знаний (слэш-памяти), я не смогу, потому что я не знаю сокетов).

Теперь к моему основному вопросу: как я могу начать делать что-то подобное, при этом как регистрировать движение, например, от одного клиента к серверу, которое затем появилось бы на всех подключенных клиентах и в игре, а также с пулями, событиями столкновений, врагами и т. д. Я не могу найти какой-либо хорошей помощи, которая действительно показывает вам, как это сделать, создав сокет, выполнив все основные соединения (чего я не знаю), а затем обновить состояние игры, если я могу назвать это так.

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

Если кто-то может хотя бы указать мне правильное направление или объяснить основы всего этого, то это было бы здорово! Спасибо!

* 1013 Дан *

Я прошу прощения, если мне многое удалось пройти, я просто хочу объяснить, что я хочу сделать

1 Ответ

1 голос
/ 30 марта 2012

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

Затем сделайте первую попытку, отправив сообщения на сервер, который возвращает те же сообщения клиенту.Это потребует, чтобы вы использовали потоки и сокеты, и это хороший способ начать.

Вы будете использовать тот же tequniqe для вашей игры позже (клиенты отправляют свое движение на сервер, и сервер передает это движение всем другим клиентам, чтобы они могли обновить изменения локально) ИЛИ клиенты отправляютперемещения на сервер, сервер обновляет движения локально.Это потребует, чтобы клиенты получали x и y кординаты всех объектов, хранящихся на сервере.Это может быть лучше в случае задержки (никогда не программируйте игру, поэтому не уверены, какой подход будет лучшим).

Итак, у вас будет бесконечные циклы как на сервере, так и на клиентах, которые каждая итерация получает / отправляет по осям x и y каждого объекта и использует их для перерисовки / обработки попаданий и так далее.Какая логика и в каком цикле будет зависеть от дизайна, который вы выберете.

...