使用ENET/COCOS2DX的C 多人游戏



我通常是网络和多人游戏的新手,所以我试图进入这个领域,以挑战并发现更多有关它的领域。因此,我决定制作我的现成游戏,该游戏是在Cocos2DX多人游戏中构建的。我使用ENET创建了服务器端,基本上我在做什么是发送速度和位置。我注意到的是,我在Google中搜索的同步并不是一个完美的信息,有人说我们应该在服务器方面进行物理逻辑,所以我的问题是:我如何才能完美同步客户之间的运动?如果通过在服务器方面做物理工作,我该如何进行任何示例?我使用(集成在Cocos2DX中(Box2D物理引擎

感谢您的阅读,对不起拼写错误

如果您播放了商业AAA网络游戏的一些实例,您会注意到它们也不是完美同步的。

网络中有各种各样的滞后,您需要隐藏它。
由于您无法补偿滞后(您无法比光速更快传输信息(,因此您需要创建一个可信的同步模拟。
您可能也不想在每个帧上传输完整的物理更新,但是即使您这样做,数据包丢失和延迟是不可避免的网络事实。

经常使用的一种方法是"死亡算",这意味着您根据实体的最后一个已知的可信位置和速度(也许是加速度(来推断实体的运动。
当您使用实际实体状态进行更新时,您会更新实体的状态。
这增加了另一层复杂性:您不希望事情传送,因此您还需要在外推状态和更新状态之间进行插值。

为了避免作弊者,您还将使服务器成为世界外观的权威,并将输入数据发送 - 密钥按下,鼠标运动,... - 到服务器而不是物理状态,并在服务器和客户端上进行所有计算。
(不仅是服务器,因为您需要在服务器确定"真相"时近似世界。(

如果您现在思考"但这意味着世界的状态对不同玩家有所不同",那么您是对的。
实际上,这并不重要 - 由于您很少有两个玩家并排观看同一件事,因此您只需要世界上所有人出现
您在实践中需要做的使世界合格的事情取决于您的游戏(基于回合的策略游戏对时间的毛刺不像快速节奏的FPS一样敏感(,而您可以在不破坏幻觉的情况下可以采取的捷径可以采取的捷径。

最新更新