java - 为 RTS 游戏实现多人游戏

标签 java networking multiplayer

我正在尝试在我的 RTS 游戏中实现多人游戏。它不是回合制的,所以我认为我应该选择 UDP,对吗?

我对于应该从客户端发送到服务器的内容也有点困惑。游戏中显示的每个对象(建筑物、树木、单位等)都位于 GameObject 类型的 ArrayList 中(用于跟踪位置和所有好东西)。因此,一种方法是让客户端将其 ArrayList 发送到服务器,并将其与其他列表合并,然后将其发回。另一种方法是将客户端输入(他点击的位置和选择的内容等)发送到服务器,并让服务器决定应该发生什么。但在向单位下达命令或其他什么时,这会导致延迟。

所以我想我的问题是,除了使用 UDP/TCP 之外,我应该如何构建多人游戏部分?客户端应该向服务器发送什么内容等等。

最佳答案

您所描述的网络类型最适合实时游戏,几乎没有可以处理丢失数据(FPS 等)的移动部件。 RTS 游戏的问题在于它们通常涉及太多单元,无法使用标准 UDP 状态复制模型进行复制。相反,大多数 RTS 游戏都使用所谓的“锁步”。这是通过同步每台机器之间的游戏状态,然后将鼠标单击事件传输给游戏的所有玩家来实现的。给定相同的初始游戏状态并应用相同的事件,游戏对所有玩家来说都是相同的。 TCP 或 UDP 协议(protocol)都可以用来实现这一点,尽管 TCP 可能更容易。

了解《帝国时代》中的步调一致:

1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond

Rather than passing the status of each unit in the game, the expectation was to run the exact same simulation on each machine, passing each an identical set of commands that were issued by the users at the same time. The PCs would basically synchronize their game watches in best war-movie tradition, allow players to issue commands, and then execute in exactly the same way at the same time and have identical games.

关于java - 为 RTS 游戏实现多人游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18300390/

相关文章:

c# - 我可以在不支付 Unity Multiplayer 服务的情况下使用 Unity 网络 HLAPI 吗?

Java JAX-WS、wsgen、类作为参数?

java.lang.NoClassDefFoundError : bsh/EvalError 错误

java - 当我运行这个小鼠标钩子(Hook)应用程序时,为什么我的鼠标出现滞后?

Java多人卡牌游戏AI集成

node.js - Deepstream.io - 客户端断开连接时服务器回调?

java - 如何打印随机生成的数字数组中重复项的第一个实例?

apache - ping 请求是否会给服务器带来负载?

linux - 如何在 Linux 上将网络流量作为一个数字获取

networking - 私网IP和公网IP的区别