網路遊戲前後端時間同步

2021-06-28 12:00:23 字數 1074 閱讀 4112

網路遊戲中會涉及到多個終端,各個終端以及伺服器的系統時間都會存在一定的差異。

如何在在遊戲中處理好這種差異呢?

一 使用前端時間

直接獲取終端的時間,用來計時,這種方式是很多單機遊戲使用的方式。

這種方式時存在漏洞的,例如我們記錄進入關卡的時間(客戶端時間),然後開始計時,每10分鐘恢復1點體力。

當我修改了我的客戶端時間之後,體力的值也隨之變化了。

即使在後端做了校驗,前端顯示也會有問題,體驗並不好。

或者如果我前端的時間更快,前端顯示我已經恢復了體力,但是傳送到後端校驗時缺失敗了。

二 使用後端時間

另外一種方式時都使用後端時間,這又會有什麼問題呢?

最明顯的就是當前後端不在同乙個時區的時,獲取的時間並不一致。

另外就是後端的時間每次都去更新比較麻煩。

比如說我要顯示倒計時,每次開啟介面的時候都需要請求一次系統時間,

然後需要另外在開乙個定時器,每秒做一次減一操作。

三 兼顧前後端時間

這是我們遊戲最終才有的一種方法。

就是在登入的時候,請求一次系統時間,然後計算前後端時間的差值,

然後再獲取前端時間的時候,加上這個差值。

這樣就可以完美的解決一二中提到的問題。

但是這又會有另乙個問題,當我登入遊戲之後,然後將遊戲進入後台,然後修改終端時間,

這又會出現一中提到的問題。

我們的解決方法是在從後台進入前台時,重新請求一次後台時間,計算時間差。

lua的**如下:

-- 儲存伺服器對時間差

local timedelta = 0

-- 根據從伺服器請求帶的時間servertime和本地時間os.time()計算出時間差servertime

function setservertime(servertime)

timedelta = servertime - os.time()

end-- 返回本地時間加上時間差之後的時間

function gettime()

return os.time() + timedelta

end

網路遊戲專題 時間同步裝置

在網路遊戲中,有乙個最基本的需求是,如果讓乙個玩家的動作 比如行走 即時地 流暢地在其它的遊戲地理位置相鄰的玩家的螢幕上顯現,如果是在區域網內,這個不是什麼大不了的問題,但是如果遊戲玩家是分散在internet上的使用者,由於網路的延時的影響,使得其成為項頗有難度的 任務。你只要想一下,玩家a發出的...

網路遊戲專題 時間同步裝置

在網路遊戲中,有乙個最基本的需求是,如果讓乙個玩家的動作 比如行走 即時地 流暢地在其它的遊戲地理位置相鄰的玩家的螢幕上顯現,如果是在區域網內,這個不是什麼大不了的問題,但是如果遊戲玩家是分散在internet上的使用者,由於網路的延時的影響,使得其成為項頗有難度的任務。你只要想一下,玩家a發出的訊...

再談網路遊戲同步

呵呵,一年前的這個時候發過一系列討論網路遊戲同步的帖子。一年後的今天,再重新討論討論這個問題。不知道大家是否碰到過這種情況,當某個玩家發出乙個火球,這個火球有自己的運動 軌跡,那麼如何來判斷火球是否打中了人呢?大部分情況,當策劃提出這個要求的時 候,一般會被程式否認,原因是 太麻煩了,呵呵。複雜點的...