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

问题描述 投票:1回答:1

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

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

   }
});

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

谢谢!

java kryonet
1个回答
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的标签对象或需要更新属性的敌方播放器对象。但就像我说的那样你可以有一个静态列表来存储这些值,但这更具可扩展性。

© www.soinside.com 2019 - 2024. All rights reserved.