天天看點

【華為聯機對戰服務】用戶端退出重連或中途進入遊戲,新玩家如何補幀?

問題背景

使用幀同步實作多人聯機遊戲,補幀是一個繞不開的話題。正常的弱網補幀,SDK已經可以實作自動補幀,遊戲可以不用關心。對于用戶端長時間關閉後重新進入房間或者遊戲中途有玩家加入的場景,新加入玩家聯機對戰SDK預設是從遊戲第一幀資料補幀,而聯機對戰伺服器不會緩存所有的補幀資料通常是緩存5分鐘曆史幀資料,這時候單純依賴SDK自動補幀就會補幀失敗了。如何解決這個問題呢,這裡提供一種思路。

解決方案

遊戲中指定房主或者房間内某個玩家,定時儲存目前遊戲需要同步的資料狀态(比如每分鐘重新整理一次,重新整理周期至少要小于五分鐘),并記錄目前幀id,然後将該資料通過一定手段同步給房間内其他玩家(比如通過修改房間屬性,将其儲存在房間屬性中),當新玩家加入房間後可以從room執行個體中擷取到房間屬性,然後将其中記錄的上一次房間狀态資料進行解析,擷取狀态資料和幀id資料。

這時候隻要以房間狀态資料為基礎,輔之以從幀id+1往後開始補幀就可以實作房間資料的同步了。

如何指定從某個id開始補幀呢?兩種場景:

  • 已啟用SDK自動補幀場景,調用SDK提供的重置補幀起始id接口。
    【華為聯機對戰服務】用戶端退出重連或中途進入遊戲,新玩家如何補幀?
  • 已關閉SDK自動補幀場景,調用SDK提供的手動補幀接口。