位置同步策略

此思路參考的雲風寫的開發筆記
流程如下:

  1. 進入地圖時做一次客戶端和服務端的對時,以服務端爲準,計算時間差,以後每隔一段時間(1分鐘)對時一次。
  2. 客戶端每隔一段時間(1秒),將當前運動狀態(位置、速度、加速度)和時間戳T1同步到服務端。
  3. 服務端接到客戶端同步後,立即推送給地圖中的所有人的客戶端。以下對於接收方是自己和其他人,

    兩種情況分別討論:

    1. 對於其他人,根據T1時刻的運動狀態和當前本地時間T2,計算T2 + 1秒時刻的預測位置,反推當前的速度。
    2. 對於自己,根據T1時刻的運動狀態和當前本地時間T2,計算當前時刻(T2)的預測位置,只要實際位置和預測位置相差不大,不用修正;否則直接移動到預測位置。

對於這套策略的總結如下:

  1. 以客戶端的操作手感爲先,服務端只做校驗,防止作弊。這樣對於自己來說,操作體驗和單機無異;對於地圖上顯示的其他玩家,位置還原的精準程度取決於上述步驟2中同步的頻率,理論上,頻率越高則越精準,不過也會帶來更高的網絡和服務器開銷,同時也要考慮遊戲類型的實際需求,各方面因素綜合考慮。
  2. 爲了減小網絡延遲的影響,採用對時和預測補償的做法。對時是在進入地圖的時候做一次,以後每隔1分鐘再做一次,以防本地時間跳變帶來的影響。預測補償很重要,對於其他人的運動,我們總是預測1秒後的位置,再反推當前速度,爲的是平滑處理,避免出現跳變。
  3. 保持一定的同步頻率,還有一個好處是保持網絡流量穩定,避免玩家在頻繁操作時大量發包。例如,在帶搖桿的遊戲裏玩家有可能會旋轉搖桿在原地轉圈,其實這種情況下其他玩家不用關心到那麼細,只用保持一定採樣頻率即可。另外,就算客戶端需要加入物理引擎也很方便,服務端不用做強驗證,只要防止穿越地圖這樣的明顯作弊即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章