2010-05-16 106 views
3

我正在编写简单的游戏,我打算将多人游戏(通过网络)作为我的大学项目。 我正在考虑客户端 - 服务器通信的两种情况:简单的网络游戏,客户端 - 服务器体系结构规划

物理(它们很琐碎!我应该称之为“碰撞测试”,实际上:))仅在服务器计算机上处​​理。因此,通信看起来像

Client1->Server: Pressed "UP" 
Server->Clients: here you go, Client1 position is now [X,Y] 
Client2->Server: Pressed "fire" 
Server->Clients: Client1 hit Client2, make Client2 disappear! 

服务器接收该事件,并将其应用到所有其他客户端。

Client1->Server: Pressed "UP" 
Server->Clients: Client1 pressed "UP", recalculate his position!! 
[Client1 receives this one as well!] 

哪一个更好?或者,也许他们都不是? :)

回答

6

通常的方法是将该信息发送至:

  1. 玩家为
  2. 在他是什么时候有(使用游戏内的时间观念,未必实时)
  3. 的玩家的移动向量(方向和速度)

然后客户端可以使用航位推算来估计其他玩家在哪里,这样网络延迟就会减少对游戏的干扰。只有当玩家改变其移动方向或移动速度时(其他客户端无法预测),更新才需要发送,因此网络带宽也将得到保存。

以下是关于航位推测的一些链接。相同的网站可能还包含更多的文章。 http://www.gamasutra.com/view/feature/3230/dead_reckoning_latency_hiding_for_.php http://www.gamedev.net/reference/articles/article1370.asp

2

我认为第一种方法更好。所以你在所有客户端拥有相同的数据。

当物理简单,计算结果总是相同时,第二种方法也可以。但是如果有可能的随机数字,您将对所有客户端产生不同的影响。

+0

那是我的第一个念头,但后来我意识到我需要更新所有的客户经常保持运动平滑(每个字符的行为类似于橡胶球:弹跳,在不同的方向快速移动等等)。 – migajek 2010-05-16 17:48:05