Closed. This question is off-topic。它当前不接受答案。












想要改善这个问题吗? Update the question,所以它是用于堆栈溢出的on-topic

已关闭8年。



Improve this question




通常,我试图通过同步弹丸发射和游戏网络来寻求某种常见问题的解决方案,但不确定哪种方法最合适。

这是带有多个弹丸(没有即时命中的武器)的2D Action 侧卷轴,并且已经有很多框架(C#XNA Framework和Lidgren库)。

目前,我正在考虑对架构进行建模,类似于半衰期源引擎。客户端将在过去〜100ms或大约3帧(固定步骤30fps)内插远程实体,并使用客户端预测。服务器对模拟具有权限。考虑用运动来编码实现似乎不错,但是对于弹丸,我不确定如何为所有玩家提供最佳游戏体验。

示例问题:

客户A
客户B
服务器
  • 客户端A和客户端B彼此面对面站立。
  • 客户端B开始向A触发并像往常一样将输入发送到服务器。
    服务器检测到火力输入,并在模拟过程中开始发射武器,同时将事件中继到客户端A。
  • 客户端A接收到该消息,但过去仍在插值客户端B(与此同时,射弹现在在
    服务器和客户端Bs机器)。
  • 客户A的渲染最终到达B发射弹丸并开始渲染的地步。
  • 客户端A看到它并跳了起来,很容易在屏幕上清除了它。但是,从服务器和客户端B的角度来看,射弹击中了他。

  • 这也是2D Sidesroller,因此所有内容均可见。

    使用插值似乎是一个基本的副作用(我认为这是必须的,但可以接受建议),因为即使没有任何网络延迟,也存在固有的插值延迟。

    问题:

    我知道它不可能是完美的,但是还有什么我可以实现的更多或更好的方法来进行模糊处理或改善它,使其看起来好/无缝,或者我是否缺少任何明显的东西?武器的射击确实在射弹实际发射之前有很短的动画时间,我意识到我们可以用这段时间隐藏一些潜伏时间,但是武器不是即时射击,从任何角度看,我总会发现客户试图躲避弹丸,而其他客户却看到自己的弹丸击中了他们,这将是一个很大的差距。

    对于玩家移动的情况,我们可以在服务器上使用滞后补偿,但是我认为这不能解决这种情况吗?

    如果射弹命中导致客户A的位置发生变化,我将不得不倒带客户A并用新数据重播他的输入,否则,我必须从空中移除弹丸(可能会死掉),这很丑无论哪种方式 :(。

    最佳答案

    有趣的是您应该提到半衰期,阀门实际上发表了一篇关于此的文章Latency Compensating Methods in Client

    Dead-Reckoning是网络游戏中一种非常普遍使用的技术,因此您应该能够在网上找到有关此信息的更多信息。

    Google给我带来了这篇gamasutra文章,Dead Reckoning Latency Hiding也可能对您有帮助

    10-08 02:02