幀同步

幀同步的兩種實現方式:

第一種:客戶端插幀,第二種服務器插幀。php

算法概念html

該算法廣泛要求網速RTT要在100ms之內,通常人數不超過8人,在這樣的狀況下,能夠像單機遊戲同樣編寫網絡遊戲。全部客戶端任意時刻邏輯都是統一的,缺點是一我的卡機,全部人等待。git

1.客戶端定時(好比每五幀)上傳控制信息。
2.服務器收到全部控制信息後廣播給全部客戶。
3.客戶端用服務器發來的更新消息中的控制信息進行遊戲。
4.若是客戶端進行到下一個關鍵幀(5幀後)時沒有收到服務器的更新消息則等待。
5.若是客戶端進行到下一個關鍵幀時已經接收到了服務器的更新消息,則將上面的數據用於遊戲,並採集當前鼠標鍵盤輸入發送給服務器,同時繼續進行下去。
6.服務端採集到全部數據後再次發送下一個關鍵幀更新消息。github

這個等待關鍵幀更新數據的過程稱爲「幀鎖定」
應用案例:大部分RTS遊戲,街霸II(xbox360),Callus模擬器。算法

 

算法流程服務器

客戶端邏輯:
1.        判斷當前幀F是否關鍵幀K1:若是不是跳轉(7)。
2.        若是是關鍵幀,則察看有沒有K1的UPDATE數據,若是沒有的話重複2等待。
3.        採集當前K1的輸入做爲CTRL數據與K1編號一塊兒發送給服務器
4.        從UPDATE K1中獲得下一個關鍵幀的號碼K2以及到下一個關鍵幀之間的輸入數據I。
5.        從這個關鍵幀到下 一個關鍵幀K2之間的虛擬輸入都用I。
6.        令K1 = K2。
7.        執行該幀邏輯
8.        跳轉(1)網絡

服務端邏輯:
1.        收集全部客戶端本關鍵幀K1的CTRL數據(Ctrl-K)等待知道收集完成全部的CTRL-K。
2.        根據全部CTRL-K,計算下一個關鍵幀K2的Update,計算再下一個關鍵幀的編號K3。
3.        將Update發送給全部客戶端
4.        令K1=K2
5.        跳轉(1)ide

 

 

 

 
 http://blog.csdn.net/erlib/article/details/46772749                 格鬥遊戲如何實現同步?
http://finance.sina.com.cn/stock/hkstock/hkstocknews/2017-05-13/doc-ifyfekhi7555611.shtml           《王者榮耀》回爐歷程
http://www.10tiao.com/html/752/201707/2651042833/1.html                  Unite 2017 | 從《鬧鬧天宮》看MOBA遊戲裏的網絡同步技術

 

 

剛纔提到該幀同步與buffer,這個buffer能夠是1也能夠到n,咱們要解決咱們的延遲問題,咱們就讓buffer足夠小。事實上《王者榮耀》最後作到的buffer是零,它不須要buffer,服務器給了我n,立刻知道是n,我收到n,我知道下一次確定是n+1,因此我收到n以後立刻就把n這一幀的輸入執行了。動畫

那麼爲何不卡頓了,畫面不抖動了?.net

最後一個關鍵點,是本地插值平滑加邏輯與表現分離。客戶端只負責一些模型、動畫、它的位置,它會根據綁定的邏輯對象狀態、速度、方向來進行一個插值,這樣能夠作到咱們的邏輯幀率和渲染幀率不同,可是作了插值平滑和邏輯表現分離,畫面不抖了,延遲感也是很好的。

 

http://www.cocoachina.com/game/20150827/13234.html

 http://blog.csdn.net/langresser_king/article/details/51330543

 

https://github.com/SnpM/LockstepFramework

 

 

http://www.360doc.com/content/17/0424/15/6432946_648246185.shtml

http://gad.qq.com/article/detail/27330

http://jjyy.guru/unity3d-lock-step-part-1 

http://jjyy.guru/fast-paced-multiplayer-part1

http://jjyy.guru/about-lockstep

http://blog.csdn.net/langresser_king/article/details/46756393

http://forum.china.unity3d.com/forum.php?mod=viewthread&tid=25828

http://www.jianshu.com/p/8bf0d4c1d780    

http://www.zhust.com/index.php/tag/%E5%B8%A7%E5%90%8C%E6%AD%A5/

http://www.taidous.com/thread-36402-1-1.html

https://answer.uwa4d.com/question/59488b5a252497237a7c3f9e/%E5%B8%A7%E5%90%8C%E6%AD%A5%E6%A1%86%E6%9E%B6%E4%B8%8B-%E6%B8%B8%E6%88%8F%E9%80%BB%E8%BE%91%E7%9A%84%E6%B5%AE%E7%82%B9%E6%95%B0%E7%B2%BE%E5%BA%A6%E5%9C%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E5%B9%B3%E5%8F%B0%E6%88%96%E4%B8%8D%E5%90%8C%E7%9A%84%E6%9C%BA%E5%99%A8%E4%B8%8D%E4%B8%80%E8%87%B4≈

https://www.zhihu.com/question/36258781

http://www.sohu.com/a/153269736_163917

 

http://blog.csdn.net/erlib/article/details/46772749       格鬥遊戲如何實現同步?

 

 

 

英文系列文章:

http://www.gabrielgambetta.com/fpm1.html

http://www.gabrielgambetta.com/client-side-prediction-server-reconciliation.html

http://www.gabrielgambetta.com/entity-interpolation.html

http://www.gabrielgambetta.com/lag-compensation.html

http://www.gabrielgambetta.com/lag-compensation.html

相關文章
相關標籤/搜索