我正在 java2d 中开发一个简单的多人游戏,一次可以处理 4 个玩家。 以下是从服务器接收数据的代码示例。
server.addListener(new Listener() {
public void received (Connection connection, Object object) {
}
});
我的问题是:当它收到其他玩家的位置等数据时,我应该如何更新它?我是否静态引用游戏类并访问其玩家数据,或者是否在开始时将玩家对象传递给客户端类?有什么好的方法吗?
谢谢!
最佳答案
如果你有一个气球,例如需要显示在每个屏幕上,那么也许你应该有一个静态列表来保存这些对象,并发送整个列表或循环遍历所有对象,并将每个单独发送到客户端,然后在客户端它可以有一个从每个游戏循环渲染的静态列表。
或者你可以传递当前需要更新的游戏对象。例如,您可以将监听器提取到外部类,而不是将其嵌套在 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 的标签对象或需要更新其属性的敌方玩家对象。但就像我说的,您可以使用静态列表来存储这些值,但这更具可扩展性。
关于java - 如何使用 kryonet 客户端处理游戏对象更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48896542/