2011-12-18 6 views
1

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

В статье это: http://www3.ntu.edu.sg/home/ehchua/programming/java/J8d_Game_Framework.html

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

Может ли кто-нибудь увидеть решение этого?

ответ

2

У вас проблема с потоками или вы спрашиваете, как создать связь между сервером и клиентом?

Для проблемы связи: простой способ: сервер периодически отправляет обновления каждого игрока, будь то постоянно подключенное TCP-соединение или просто периодические простые старые недостоверные UDP-пакеты. Выбор того, какой из них использовать, будет зависеть от ваших требований приложения. Читайте о различии между TCP и UDP - есть много, много мест, в том числе на SO (только поиск), которые обсуждают компромиссы. После того, как вы обновите сервер в состоянии, и вы можете убедиться, что это работает, предоставляя серверу какое-то состояние, написанное в скриптах, вы можете отправить некоторые данные другим способом. В зависимости от вашего приложения вам может потребоваться осторожность в отношении безопасности: может ли игрок лежать на сервере о своих действиях и т. Д.

В Java соединения часто выполняются через классы Socket и ServerSocket или через DatagramPacket и DatagramSocket.

+0

Извините, что было непонятно. Я спрашиваю, как спроектировать клиента. У меня есть сервер, и я могу манипулировать состоянием (и получать обновления) с помощью такого простого инструмента, как telnet. Но я действительно не уверен, как я должен проектировать клиента с помощью графического интерфейса. –

+0

Итак, какая у вас проблема? При получении данных вам необходимо обновить экран, но это занимает некоторое время, и вы не хотите пропустить другие обновления, пока вы заняты перерисовкой экрана? – Gravity

+0

Мне нужна помощь в разработке системы. Мне кажется, что мне нужен поток, который получает информацию об игре с сервером, и когда он получает гаджет, ему как-то нужно сказать апплет: Эй, у меня есть обновления для вас, пожалуйста, нарисуйте это. Я не хочу пропустить обновления во время рисования. –

1

Я просто не вижу, как я могу реализовать его, не заставляя апплет-нить висеть.

Внесите ActionListener, чтобы выполнить обновление/проверку сервера. Вызовите слушателя в цикле с помощью Swing Timer. См. How to Use Swing Timers для более подробной информации.

+0

Разве это не заставит игру обновлять только раз в секунду, а не всякий раз, когда есть данные, которые изменились? –

+0

Это зависит от дизайна игры. НАПРИМЕР. Если «вражеское судно» продолжает двигаться в определенном направлении, пока сервер не отправит новую команду, апплет может продолжить перемещение корабля, пока не будет сказано иначе. Было бы неплохо расширить то, что делает игра, и как она работает. –