为RTS游戏实现多人游戏

时间:2013-08-18 14:59:49

标签: java networking multiplayer

我正在尝试将多人游戏实施到我的RTS游戏中。它不是回合制的,所以我看到它的方式我应该使用UDP,对吗?

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

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

1 个答案:

答案 0 :(得分:4)

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

了解帝国时代的锁步:

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

  

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