我试图找到最好的方法来做到这一点,考虑在移动(3G带宽)上使用抛射和下降块转弯交叉平台游戏。
我想知道一个设备(当前播放器转=服务器角色)是否可以运行物理并将一些“关键帧”数据(块的位置,方向)发送到另一个设备,该设备只是从当前状态插入到收到“关键帧”。 使用这种方法,我非常害怕大量数据,以保证其他播放器设备上的视觉效果。
另一种方法应该是发送物理数据(力,加速......)并在其他设备上运行物理,但我恐怕永远不会有相同的结果。
答案 0 :(得分:9)
我目前的实施方式是这样的:
对我而言,这非常有效。我的物理系统运行在几十个子系统(地图)上。
关于我的实施的一些关键事项:
完全忽略任何未标记为“必要”的对象。例如,污垢和灰尘颗粒响应玩家运动或草和水,因为它响应玩家的运动。基本上是非必要的东西。
所有这些都是通过UDP发送的。这对TCP来说是可怕的。
答案 1 :(得分:6)
您需要发送绝对位置和旋转。
你是对的,如果你只发送力量,它就行不通。有可能使这项工作成功,但这比发送职位要困难得多。您需要两个设备以相同的方式进行计算,因此在每个帧之前,您需要等待来自其他设备的输入,您需要使用相同的时间步骤,脚本需要以相同的顺序运行或者是可交换的,并且您只能使用保证在两台机器上提供相同结果的CPU指令。
最后一个是特别有问题的,因为这意味着你不能使用浮点数(浮点数/单数或双打)。你必须使用整数,或滚动你自己的数字格式,这样你就无法利用现有的许多工具。
许多游戏使用客户端 - 服务器模型和客户端预测。如果您的游戏是基于回合制的,那么您可以通过不使用客户端预测来逃脱。相反,你可能会让客户端滞后一段时间,这样你就可以相当确定当你去渲染时服务器的输入已经存在了。客户端预测仅在客户端可以进行服务器关心的更改(例如移动)时才是重要的。