如何使用WebSocket进行实时游戏

如何使用WebSocket进行实时游戏,websocket,multiplayer,Websocket,Multiplayer,我想制作一个使用WebSocket和node.js服务器的2人乒乓游戏。在客户端和服务器上都使用。到目前为止,我唯一的经验是创建聊天应用程序 这是我第一次尝试多人游戏,所以我不太熟悉网络游戏。服务器是否应跟踪: 球处于的每个位置,多久或何时 球员移动,球员向左或向右移动,如果我按住一段时间怎么办,我该如何处理?我是否应该像按HoldStartPosition和按HoldStopPosition那样发送?我想这很容易,如果我只允许按压,但不允许按住 我的想法: 当球击中球员时,客户机计算速度、开始

我想制作一个使用WebSocket和node.js服务器的2人乒乓游戏。在客户端和服务器上都使用。到目前为止,我唯一的经验是创建聊天应用程序

这是我第一次尝试多人游戏,所以我不太熟悉网络游戏。服务器是否应跟踪:

  • 球处于的每个位置,多久或何时
  • 球员移动,球员向左或向右移动,如果我按住一段时间怎么办,我该如何处理?我是否应该像
    按HoldStartPosition
    按HoldStopPosition
    那样发送?我想这很容易,如果我只允许按压,但不允许按住
  • 我的想法:

  • 当球击中球员时,客户机计算速度、开始和结束位置,另一个客户机应根据这些计算执行正确的动画
  • 不知道

  • 你会找到关于游戏网络的书籍

    在简要描述中,我发现了一个有趣的实现: 服务器和客户端计算游戏的物理量。服务器将是主服务器,并且具有所有实体的正确状态,而客户端将尝试“预测”实体的状态并保持平滑动画。 客户端将定期从服务器更新实体的正确状态。在某些游戏中,您可能会看到实体突然进行远程传输,这是因为客户端预测的位置与服务器的实际位置不匹配

    实体状态(如球或球员)通常包含位置、速度、按钮状态(向下键/向上键)等信息


    除此之外,这是让你的想象力去狂野和测试的最佳解决方案,看看什么工作。有很多因素需要考虑,例如玩家延迟和带宽。

    有一个stackexchange网站专门用于游戏开发:

    最佳实践是只发送客户端需要知道的更新。此外,通常您发送的是用户操作的结果,而不是操作本身。可以计算的东西(物理)不需要发送,除了周期性的同步点,用于解释随时间累积的浮点错误并与远程用户操作同步。这也使得游戏看起来更具交互性,并涵盖了一些由网络延迟和抖动引起的口吃

    该模型的主要缺点是,如果您有高网络延迟或数据包丢失,那么当物理计算继续进行时,您将获得发散的时间线效应,突然远程用户会更新您的数据,表明他们做了一些影响我们尚未发现的物理的事情。但这在大多数网络游戏中是一个标准问题,而对于大多数类型的实时游戏来说,情况更糟

  • 客户端计算-没有-除非您希望它预测下一个游戏步骤*(服务器anwser)。整个游戏在服务器上运行,这是唯一值得信赖的数据和计算来源。在类似乒乓球的游戏中,只有不到10个对象,您可以经常发送数据(50毫秒间隔即可)。对于一个球,我会发送[x,y,速度或角度],对于一个桨[x,y]。 然后在旧的(客户机上的x,y)和新的(您刚从服务器上获得的x,y)之间进行插值(动画时间为-50ms)

  • 不要向(32100)发送数以百万计的副本-玩家按下-而是在每段时间(100ms?)发送一个包含“玩家按下”100ms或“玩家设置位置”等信息的数据包,然后检查服务器端此移动是否可行,并接受或拒绝

  • 也许这条线索会对你的冒险有所帮助:


    [*1]预测是一种滞后补偿机制,您可以稍后实施。简而言之,这意味着服务器和客户端共享一些游戏逻辑代码,当客户端没有来自服务器的当前数据时,它会尝试模拟真实游戏中发生的事情。

    你一定要看看@RobHawkes博客:他开发并继续构建一款名为Rawkets的HTML5多人游戏。我相信他会分享一大堆与你正在寻找的东西和你将遇到的其他事情非常相关的主题信息。