【发布时间】:2016-02-25 01:05:28
【问题描述】:
所以我开始制作一款我想使用套接字的多人游戏。这是一个简单的 2D 游戏,我希望发送的所有对象都扩展了一个名为 Entity 的类。我希望以 30Hz 以最小的延迟或“ping”发送对象的位置。目前我将对象作为 ArrayList 发送,我确信这不是解决此问题的最佳方法,也许我错了。此外,代码需要允许某人加入并发送他们的玩家数据(例如他们的姓名),而不会干扰期望位置而不是信息的 ObjectInputStream。这是我迄今为止尝试过的(请注意,这些方法是在每秒定期调用 30 次的方法中)
客户:
public void Update {
...
outStream = new ObjectOutputStream(socket.getOutputStream());
outStream.writeObject(w.getAllLocalEntities());
//send objects created by this client (e.g bullets) and this client
inStream = new ObjectInputStream(socket.getInputStream());
w.setEntities((ArrayList<Entity>) inStream.readObject());
//recieve all objects the server has recieved from all clients
}
一些对象也是在服务器端创建的,例如僵尸等。 服务器:
public void Update {
...
inStream = new ObjectInputStream(socket.getInputStream());
server.addEntities((ArrayList<Entity>) inStream.readObject());
//recieve client objects
outStream = new ObjectOutputStream(socket.getOutputStream());
outStream.writeObject(server.getEntities());
//send all objects
}
这似乎效率很低,所以我想知道是否有人知道更好的解决方法。我的主要目标是最小化延迟/ping,记住可能有很多对象(超过 500 个)。所以问题是......你能改进我的方法吗?任何帮助表示赞赏。
【问题讨论】: