如何使用kryonet客户端处理游戏对象更新

时间:2018-02-21 00:46:05

标签: java kryonet

我在java2d中开发一个简单的多人游戏,一次可以处理4个玩家。 这是一个从服务器接收数据的代码示例。

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

   }
});

我的问题是:当收到的数据如其他玩家的位置时,我该如何更新?我是否静态引用游戏类来访问它的播放器数据,还是我在开始时将播放器对象传递给客户端类?这样做有好办法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

例如,如果您有一个气球,需要在每个屏幕上显示,那么也许您应该有一个包含这些对象的静态列表,并发送整个列表或遍历所有列表,然后分别将它们分别发送给客户端和然后在客户端,它可以有一个静态列表,该列表可以从每个游戏循环中呈现出来。

或者您可以传递您需要更新的当前游戏对象。例如,您可以将侦听器提取到外部类,而不是将其嵌套在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);

别忘了,您还可以通过在网络处理程序中为该对象创建方法来更新需要手动更新的对象。

并在启动服务器之前用所有需要连接的事物来构造它,例如,您可以传递一个显示ping的标签对象或一个您需要更新其属性的敌方玩家对象。但是就像我说的那样,您可以有一个静态列表来存储这些值,但这更具可伸缩性。