【问题标题】:Implement multiplayer for RTS game为 RTS 游戏实现多人游戏
【发布时间】:2013-08-18 14:59:49
【问题描述】:

我正在尝试在我的 RTS 游戏中实现多人游戏。它不是基于回合的,所以我认为我应该使用 UDP,对吧?

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

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

【问题讨论】:

    标签: java networking multiplayer


    【解决方案1】:

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

    阅读《帝国时代》中的锁步:

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

    而不是传递游戏中每个单位的状态, 期望在每台机器上运行完全相同的模拟, 向每个人传递一组相同的命令,这些命令由 同时用户。个人电脑基本上会同步他们的 最佳战争电影传统的游戏手表,允许玩家发行 命令,然后以完全相同的方式同时执行 并且有相同的游戏。

    【讨论】:

    • 我认为转移实际鼠标点击的情况很少见。而是那些点击所指示的预期操作将被发送(并验证)
    猜你喜欢
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 2019-08-05
    • 2016-06-24
    • 1970-01-01
    相关资源
    最近更新 更多