2013-08-18 257 views
2

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

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

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

回答

5

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

阅读有关步调一致的帝国时代:

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

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

+1

非常有趣,谢谢! – lawls

+0

我认为转移*实际* mouseclicks将是罕见的。而是这些点击表明的意图行动将被发送(并经过验证) – Textmode