Kryonet:客户端不能同时发送和接收?

时间:2013-03-11 17:48:52

标签: java networking kryonet

我正在使用Slick2D制作游戏并使用Kryonet进行多人游戏。我的架构设置为所有客户端都连接到服务器,而服务器本身并不玩游戏(而不是在同一程序中运行客户端和服务器的播放器)。这是一个2D射击游戏,当只有一个客户正在玩时,一切正常。当我连接另一个客户端时会出现此问题。

显然客户端无法同时发送和接收。例如,如果两个客户同时射击他们的武器,看起来只有那个玩家在他们自己的客户端射击,而另一个玩家闲置。同样,如果两个玩家都在移动,则另一个玩家在客户端玩家停止之前不会移动,然后另一个玩家将跳转到当前位置。

我在这里提供了客户端和服务器侦听器的代码:

public class ClientGameListener extends Listener {

protected Client owner;
protected MultiplayerClientGameState state;

public ClientGameListener(Client c, MultiplayerClientGameState state) {
    owner = c;
    this.state = state;
}

@Override
public void received(Connection connection, Object obj) {
    if(obj instanceof PositionPacket) {
        state.adjustPlayerPosition((PositionPacket)obj);
    }
    else if(obj instanceof FirePacket) {
        state.scheduleFireListing((FirePacket)obj);
    }
    else if(obj instanceof ToggleWeaponPacket) {
        state.togglePlayerWeapon((ToggleWeaponPacket)obj);
    }
}
}

public class ServerGameListener extends Listener {

protected Server owner;
protected MultiplayerServerGameState state;

public ServerGameListener(Server s, MultiplayerServerGameState state) {
    owner = s;
    this.state = state;
}

@Override
public void received(Connection connection, Object obj) {
    if(obj instanceof PositionPacket) {
        owner.sendToAllExceptTCP(connection.getID(), obj);
    }
    else if(obj instanceof FirePacket) {
        owner.sendToAllExceptTCP(connection.getID(), obj);
    }
    else if(obj instanceof ToggleWeaponPacket) {
        owner.sendToAllExceptTCP(connection.getID(), obj);
    }
}
}

有关我的客户为何无法同时发送和接收信息或如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

您可以尝试通过 UDP 发送消息。