我目前正处于移动设备 2D 游戏的规划阶段,我将使用 cocos2d-x 在 C++ 中制作。游戏将是回合制的,每回合都会有一个阶段,在该阶段中将进行物理模拟。它也将是跨平台的。
我是多人网络的新手,想知道同步物理的最佳方式是什么,因为 Box2d 在不同设备上的行为并不完全相同。
模拟不必在每个设备上同时进行,但我确实需要结果完全相同。理想情况下,玩家将能够在他们自己的设备上目睹与对手回合期间发生的相同物理模拟(即弹丸运动、弹跳、碰撞)和结果,只要他们决定开始自己的回合。
什么是最好的方法来做到这一点?根据我的研究,我提出了几个解决方案。我是否应该编写一些服务器代码来接收用户输入并处理所有物理模拟,然后将结果发送到每个设备?或者有没有一种方法可以在一个设备上处理模拟并将所有信息发送到另一个设备?
另外,由于我无法在每个设备上运行模拟并保证相同的结果,因此如何通过网络发送模拟期间发生的所有事情?我是否会使用每隔几个 TimeSteps 期间发生的情况的信息更新服务器(或设备)?
我也会考虑实现我自己的物理/碰撞检测。
最佳答案
如果不同的设备不能运行模拟并获得相同的结果,那就不行了。您必须在一个地方运行 sim 并分发结果。
在其中一台设备上还是在单独的服务器上?在单独的服务器上实现 sim 会容易得多吗?如果是,那就去做;如果没有,那么就没有理由涉及额外的机器。
您建议的更新方案是一个很好的起点。它不需要涉及转弯期间发生的所有事情,只需涉及显示例程向用户显示 Action 所需的内容。从小的时间间隔开始(这意味着大量数据),然后将它们放大,直到视觉效果开始受到影响。
关于networking - 回合制多人物理网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9477413/