最近嘗試使用Box2D做為物理引擎來模擬與製作遊戲(想要模仿怪物彈珠)
但遇到了前、後端同步的問題
為了避免前端直接傳送封包作弊
希望亂數與物理參數(速度、反作用力等)都是由後端產生
最後由前端直接帶入後端產生的參數並驅動Body產生結果
在物理引擎上前、後端皆使用fixed timestamp的方法去運行
狀況1:
場面上除了玩家操控的Body外
其他物件都是不會移動的(僅會產生物理碰撞)
玩家的操作會有隨機性並產生物理參數讓前端使用
一開始有使用CCD但在某些狀況下會導致前、後端的位置不一樣
後來去看了核心才發現主要原因是CCD所造成的
也因為遊戲世界中並沒有會高速移動的Body
所以就先將CCD的機制關閉
關閉後似乎就沒有再出現運算結果不一致的狀況
請問有辦法在開啟CCD的情況下也保持物理運算結果是一樣的嗎?
狀況2:
承上述的狀況1
但遊戲世界中增加了一些會自體來回移動的Body並影響玩家的操作結果
請問要如何讓前端只使用物理參數下可以達到運算結果一致?
以下提供我想到的解法
把後端在物理運算中每一個tick的結果保存下來傳送給前端演示
但這種做法會導致封包流量過大
以一秒鐘固定跑60個tick的狀況下
每一次動作可能產生5 ~ 6KB的流量
雖然可以讓前端完美重現但流量應該會爆炸
而且上面的做法假設碰到狀況2就完全無法適用
中間也有參考一些別人的遊戲
但有些遊戲似乎是讓前端去跑結果並且告知後端
請問這樣做不會容易發生作弊的狀況嗎?