我正在使用 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);
}
}
}
关于为什么我的客户不能同时发送和接收信息的任何想法,或者如何克服这个问题?