当前位置:  开发笔记 > 运维 > 正文

如何在多人游戏中同步物理?

如何解决《如何在多人游戏中同步物理?》经验,为你挑选了2个好方法。

我试图找到最好的方法来做到这一点,考虑到在移动(3G带宽)上使用抛射和下降块的转弯交叉平台游戏.

我想知道一个设备(当前播放器转=服务器角色)是否可以运行物理并将一些"关键帧"数据(块的位置,方向)发送到另一个设备,该设备只是从当前状态插入到"关键帧"接收.使用这种方法,我非常害怕大量数据,以保证其他播放器设备上的视觉效果.

另一种方法应该是发送物理数据(力,加速......)并在其他设备上运行物理,但我恐怕永远不会有相同的结果.



1> Kevin Wang..:

我目前的实现是这样的:

    服务器管理物理模拟

    在任何物体的任何重大碰撞中,物体的绝对位置,旋转和速度/加速度/力被发送到每个客户.

    客户端将每个对象设置在该位置及其速度并应用必要的力.

    客户端计算延迟并推进物理系统以适应该数量的滞后时间.

对我来说,这非常有效.我的物理系统运行在几十个子系统(地图)上.

关于我的实现的一些关键事项:

完全忽略任何未标记为"必要"的对象.例如,污垢和灰尘颗粒响应玩家运动或草和水,因为它响应玩家的运动.基本上非必要的东西.

所有这些都是通过UDP发送的.这对TCP来说是可怕的.



2> notallama..:

您将要发送绝对位置和旋转.

你是对的,如果你只发送力量,它就行不通.有可能使这项工作成功,但这比发送职位要困难得多.您需要两个设备以相同的方式进行计算,因此在每个帧之前,您需要等待来自其他设备的输入,您需要使用相同的时间步骤,脚本需要以相同的顺序运行或者是可交换的,并且您只能使用保证在两台机器上提供相同结果的CPU指令.

最后一个是特别成问题的,因为它意味着你不能使用浮点数(浮点数/单数或双打).你必须使用整数,或滚动自己的数字格式,所以你不能利用许多现有的工具.

许多游戏使用客户端 - 服务器模型和客户端预测.如果您的游戏是基于回合制的,那么您可以通过不使用客户端预测来逃脱.相反,你可能会让客户端滞后一段时间,这样你就可以相当确定当你去渲染时服务器的输入已经存在了.客户端预测仅在客户端可以进行服务器关心的更改(例如移动)时才是重要的.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有