我是网络游戏和多人游戏的新手,所以我试图以challange进入这个领域并发现更多相关信息。所以我决定制作我在cocos2dx多人游戏中制作的现成游戏。我使用enet创建了服务器端,基本上我正在做的是发送速度和位置。 我注意到同步不是很完美我在谷歌搜索一些说我们应该在服务器端做物理逻辑所以我的问题是: 如何在客户端之间完美同步运动? 如果通过在服务器端做物理的东西我怎么能这样做呢? 我使用(集成在cocos2dx中)Box2D物理引擎
感谢您阅读抱歉拼写错误
答案 0 :(得分:0)
如果你并排玩商业AAA网络游戏的几个实例,你会发现它们也没有完全同步。
网络中存在各种各样的延迟,你需要隐藏它
由于无法补偿延迟(您无法以比光速更快的速度传输信息),因此需要创建可信的同步模拟。
您可能也不希望在每个帧上传输完整的物理更新,但即使您这样做,数据包丢失和延迟也是不可避免的网络事实。
经常使用的一种方法是“航位推算”,这意味着您可以根据实体的最后已知可信位置和速度(可能还有加速度)来推断实体的运动。
当您获得实际实体状态的更新时,您将更新实体的状态
这增加了另一层复杂性:您不希望传送内容,因此您还需要在外推状态和更新状态之间进行插值。
为了避免作弊,你还可以使服务器成为世界的权威,并将输入数据 - 按键,鼠标移动...... - 发送到服务器而不是物理状态,并在服务器和客户端上进行所有计算 (不仅仅是服务器,因为你需要在服务器确定“真相”时近似世界。)
如果你现在想“但这意味着世界的状况对于不同的玩家来说是不同的”,你是对的。
实际上这并不重要 - 因为你很少有两个玩家并排看着同样的东西,你只需要世界对每个人都显得似乎合理。
你需要在实践中做些让世界变得合理的东西取决于你的游戏(回合制战略游戏不像快节奏的FPS那样对时间故障敏感),你可以采取什么捷径而不破坏幻觉