2013-03-11 34 views
1

我正在用Slick2D制作游戏,并使用Kryonet进行多人游戏。我的架构是为了让所有的客户端连接到服务器而不是玩游戏本身(与在同一程序中运行客户端和服务器的玩家相反)。这是一款2D射击游戏,当只有一个客户玩时,一切正常。我连接另一个客户端时出现此问题。Kryonet:客户端不能同时发送和接收?

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

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

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); 
    } 
} 
} 

为什么我的客户端不能同时发送和接收信息的任何想法,或如何解决这个问题?

回答

相关问题