最近尝试使用Box2D做为物理引擎来模拟与制作游戏(想要模仿怪物弹珠)
但遇到了前、后端同步的问题
为了避免前端直接传送封包作弊
希望乱数与物理参数(速度、反作用力等)都是由后端产生
最后由前端直接带入后端产生的参数并驱动Body产生结果
在物理引擎上前、后端皆使用fixed timestamp的方法去运行
状况1:
场面上除了玩家操控的Body外
其他物件都是不会移动的(仅会产生物理碰撞)
玩家的操作会有随机性并产生物理参数让前端使用
一开始有使用CCD但在某些状况下会导致前、后端的位置不一样
后来去看了核心才发现主要原因是CCD所造成的
也因为游戏世界中并没有会高速移动的Body
所以就先将CCD的机制关闭
关闭后似乎就没有再出现运算结果不一致的状况
请问有办法在开启CCD的情况下也保持物理运算结果是一样的吗?
状况2:
承上述的状况1
但游戏世界中增加了一些会自体来回移动的Body并影响玩家的操作结果
请问要如何让前端只使用物理参数下可以达到运算结果一致?
以下提供我想到的解法
把后端在物理运算中每一个tick的结果保存下来传送给前端演示
但这种做法会导致封包流量过大
以一秒钟固定跑60个tick的状况下
每一次动作可能产生5 ~ 6KB的流量
虽然可以让前端完美重现但流量应该会爆炸
而且上面的做法假设碰到状况2就完全无法适用
中间也有参考一些别人的游戏
但有些游戏似乎是让前端去跑结果并且告知后端
请问这样做不会容易发生作弊的状况吗?