【问题标题】:Simple network gaming, client-server architecture planning简单的网络游戏、客户端-服务器架构规划
【发布时间】:2019-06-04 22:03:52
【问题描述】:

我正在编写简单的游戏,我计划将多人游戏(通过网络)作为我的大学项目。 我正在考虑客户端-服务器通信的两种方案:

物理(它们是微不足道的!实际上我应该称之为“碰撞测试”:))仅在服务器机器上处理。因此,通信看起来像

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!]

哪个更好?或者可能一个都没有?

【问题讨论】:

    标签: multiplayer


    【解决方案1】:

    通常的方法是发送此信息:

    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】:

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

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

      【讨论】:

      • 这是我的第一个想法,但后来我意识到我需要经常更新所有客户端以保持动作流畅(每个角色的行为类似于橡皮球:弹跳,以不同的方式快速移动方向等)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      相关资源
      最近更新 更多