Как обрабатывать обновления игровых объектов с помощью клиента kryonet

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

server.addListener(new Listener() {
   public void received (Connection connection, Object object) {

   }
});

Мой вопрос: когда он получил данные, такие как местоположение другого игрока, как мне их обновить? Должен ли я статически ссылаться на класс игры, чтобы получить доступ к данным игрока, или я передаю объект игрока классу клиента в начале? Есть ли хороший способ сделать это?

Спасибо!


person guavadrag0n    schedule 21.02.2018    source источник


Ответы (1)


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

Или вы можете передать текущий игровой объект, который вам нужно обновить. Например, вы можете извлечь прослушиватель во внешний класс вместо того, чтобы вкладывать его в метод serever.addListener. Как это

package BTDOnlineToolKit;

import com.esotericsoftware.kryonet.*;

import packets.GeneralPackets.Ping;

public class NetworkHandler extends Listener {

    private Client clientObject;

    public NetworkHandler(Client clientObject) {
        this.clientObject = clientObject;
    }

    @Override
    public void connected(Connection connection) {
        clientObject.updateReturnTripTime();
        connection.updateReturnTripTime();
    }

    @Override
    public void disconnected(Connection connection) {
        super.disconnected(connection);
    }

    @Override
    public void idle(Connection connection) {
        super.idle(connection);
    }

    @Override
    public void received(Connection con, Object packet) {
        if (packet instanceof Ping) {
            Ping ping = (Ping) packet;
            if (ping.returned) {

            }
        }
    }

}

NetworkHandler netHandle = new NetworkHandler(Anyobjects you need it to parse);
Server.addListener(netHandle);

Не забывайте, что вы также можете обновить объекты, которые вам нужно обновить вручную, создав для этого метод в сетевом обработчике.

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

person Boozie    schedule 05.02.2019