代码之家  ›  专栏  ›  技术社区  ›  migajek

简单的网络游戏,客户机-服务器架构规划

  •  3
  • migajek  · 技术社区  · 14 年前

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

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

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

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

    2 回复  |  直到 14 年前
        1
  •  6
  •   Esko Luontola    14 年前

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

    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
  •  2
  •   cpt.oneeye    14 年前

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

    当物理很简单,计算结果总是相同时,第二种方法也可以。但是如果有随机数,你对所有的客户都会有不同的影响。