日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手机格斗网游该如何避免延迟?

發(fā)布時(shí)間:2024/8/26 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手机格斗网游该如何避免延迟? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

早期 RTS,XBOX360 LIVE游戲常用同步策略是什么?格斗游戲多人聯(lián)機(jī)如何保證流暢性和一致性?如何才能像單機(jī)游戲一樣編寫網(wǎng)游?

算法概念

該算法普遍要求網(wǎng)速RTT要在100ms以內(nèi),一般人數(shù)不超過8人,在這樣的情況下,可以像單機(jī)游戲一樣編寫網(wǎng)絡(luò)游戲。所有客戶端任意時(shí)刻邏輯都是統(tǒng)一的,缺點(diǎn)是一個(gè)人卡機(jī),所有人等待。

1.客戶端定時(shí)(比如每五幀)上傳控制信息。

2.服務(wù)器收到所有控制信息后廣播給所有客戶。

3.客戶端用服務(wù)器發(fā)來的更新消息中的控制信息進(jìn)行游戲。

4.如果客戶端進(jìn)行到下一個(gè)關(guān)鍵幀(5幀后)時(shí)沒有收到服務(wù)器的更新消息則等待。

5.如果客戶端進(jìn)行到下一個(gè)關(guān)鍵幀時(shí)已經(jīng)接收到了服務(wù)器的更新消息,則將上面的數(shù)據(jù)用于游戲,并采集當(dāng)前鼠標(biāo)鍵盤輸入發(fā)送給服務(wù)器,同時(shí)繼續(xù)進(jìn)行下去。

6.服務(wù)端采集到所有數(shù)據(jù)后再次發(fā)送下一個(gè)關(guān)鍵幀更新消息。

這個(gè)等待關(guān)鍵幀更新數(shù)據(jù)的過程稱為“幀鎖定”

應(yīng)用案例:大部分RTS游戲,街霸II(xbox360),Callus模擬器。

算法流程

客戶端邏輯:

判斷當(dāng)前幀F(xiàn)是否關(guān)鍵幀K1:如果不是跳轉(zhuǎn)(7)。

如果是關(guān)鍵幀,則察看有沒有K1的UPDATE數(shù)據(jù),如果沒有的話重復(fù)2等待。

采集當(dāng)前K1的輸入作為CTRL數(shù)據(jù)與K1編號(hào)一起發(fā)送給服務(wù)器

從UPDATE K1中得到下一個(gè)關(guān)鍵幀的號(hào)碼K2以及到下一個(gè)關(guān)鍵幀之間的輸入數(shù)據(jù)I。

從這個(gè)關(guān)鍵幀到下 一個(gè)關(guān)鍵幀K2之間的虛擬輸入都用I。

令K1 = K2。

執(zhí)行該幀邏輯:

跳轉(zhuǎn)(1)

服務(wù)端邏輯:

收集所有客戶端本關(guān)鍵幀K1的CTRL數(shù)據(jù)(Ctrl-K)等待知道收集完成所有的CTRL-K。

根據(jù)所有CTRL-K,計(jì)算下一個(gè)關(guān)鍵幀K2的Update,計(jì)算再下一個(gè)關(guān)鍵幀的編號(hào)K3。

將Update發(fā)送給所有客戶端

令K1=K2

跳轉(zhuǎn)(1)
?


服務(wù)器根據(jù)所有客戶端的最大RTT,平滑計(jì)算下一個(gè)關(guān)鍵幀的編號(hào),讓延遲根據(jù)網(wǎng)絡(luò)情況自動(dòng)調(diào)整。

算法演示

我根據(jù)該算法將街機(jī)模擬器修改出了一個(gè)可用于多人對(duì)戰(zhàn)的版本,早期有一個(gè)叫做kaillera的東西,可以幫助模擬器實(shí)現(xiàn)多人聯(lián)機(jī),但是并沒有作幀鎖定,只是簡(jiǎn)單將鍵盤消息進(jìn)行收集廣播而已,后來Capcom在PSP和360上都出過街霸的聯(lián)網(wǎng)版本,但是聯(lián)網(wǎng)效果不理想。這個(gè)算法其實(shí)局域網(wǎng)有細(xì)就經(jīng)常使用了,只是近年來公網(wǎng)速度提高,買二手手機(jī)很容易找到RTT<50ms的服務(wù)器,因此根據(jù)上述算法,在平均RTT=100ms(操作靈敏度1/10秒),情況下,保證自動(dòng)計(jì)算關(guān)鍵幀適應(yīng)各種網(wǎng)絡(luò)條件后,就能夠像編寫單機(jī)游戲一樣開發(fā)網(wǎng)游,而不需狀態(tài)上作復(fù)雜的位置/狀態(tài)同步。


從上圖的演示中可以看到,兩個(gè)模擬器進(jìn)程都在運(yùn)行1941這個(gè)游戲,兩邊客戶端使用了該算法,將邏輯統(tǒng)一在一個(gè)整體中。
?


最后這張圖是運(yùn)行KOF99的效果圖,兩邊完美同步,上圖是我開發(fā)的街機(jī)對(duì)戰(zhàn)效果,在公網(wǎng)環(huán)境下,只要不是小型寬帶用戶,一般電信或者聯(lián)通用戶都能有一個(gè)比較好的體驗(yàn)。

幀間無等待改進(jìn)

針對(duì)傳統(tǒng)幀鎖定算法網(wǎng)速慢會(huì)卡到網(wǎng)速快的問題,實(shí)踐中線上動(dòng)作游戲通常用“定時(shí)不等待”的方式再每次Interval時(shí)鐘發(fā)生時(shí)固定將操作廣播給所有用戶,不依賴具體每個(gè)玩家是否有操作更新:

單個(gè)用戶當(dāng)前鍵盤上下左右攻擊跳躍是否按下用一個(gè)32位整數(shù)描述,服務(wù)端描述一局游戲中最多8玩家的鍵盤操作為:int player_keyboards[8];

服務(wù)端每秒鐘50次向所有客戶端發(fā)送更新消息(包含所有客戶端的操作和遞增的幀號(hào)): update=(FrameID,player_keyboards)

客戶端就像播放游戲錄像一樣不停的播放這些包含每幀所有玩家操作的update消息。

客戶端如果沒有update數(shù)據(jù)了,就必須等待,直到有數(shù)據(jù)到來。

客戶端如果一下子收到很多連續(xù)的update,則快進(jìn)播放。

客戶端只有按鍵按下或者放開,就會(huì)發(fā)送消息給服務(wù)端(而不是到每幀開始才采集鍵盤),消息只包含一個(gè)整數(shù)。服務(wù)端收到以后,改寫player_keyboards

雖然網(wǎng)速慢的玩家網(wǎng)絡(luò)一卡,可能就被網(wǎng)速快的玩家給秒了(其他游戲也差不多)。但是網(wǎng)速慢的玩家不會(huì)卡到快的玩家,只會(huì)感覺自己操作延遲而已。另一個(gè)側(cè)面來說,土豪的網(wǎng)宿一般比較快,我們要照顧。

隨機(jī)數(shù)需要服務(wù)端提前將種子發(fā)給各個(gè)客戶端,各個(gè)客戶端算邏輯時(shí)用該種子生成隨機(jī)數(shù),另外該例子以鍵盤操作為例,實(shí)際可以以更高級(jí)的操作為例,比如“正走向A點(diǎn)”,“正在攻擊”等。幀鎖定系列方法目前也成功的被應(yīng)用到了若干線上實(shí)時(shí)動(dòng)作游戲中。

關(guān)于幀鎖定系列的方法有很多類似實(shí)現(xiàn)(包括后面提到的幀間無等待改進(jìn),包括 Lock Step等),但是他們的核心都是一個(gè):保證所有客戶端每幀的輸入都一樣。這樣的方式被格斗游戲,RTS和足球(FIFA類)、籃球(NBA)等體育和動(dòng)作游戲大量使用,比如我們熟悉的各大戰(zhàn)網(wǎng)平臺(tái)游戲(Xbox Live等),還有很多基于模擬器的街機(jī)對(duì)戰(zhàn)平臺(tái)。以及不少大型多人橫版動(dòng)作游戲。以開發(fā)便利,同步邏輯直觀而受到大家歡迎。

而近兩年動(dòng)作游戲領(lǐng)域也涌現(xiàn)出一些新的改良方法,比如 Time Warp,以客戶端先行+邏輯不一致時(shí)回滾的方式,帶來了更好的同步效果,俗稱時(shí)間回退法。不果國內(nèi)暫時(shí)沒看到有游戲這么嘗試,更多的是國外近兩年的雙人動(dòng)作游戲比較多,要求游戲每幀狀態(tài)都可以保存,邏輯上開發(fā)會(huì)復(fù)雜一些。國內(nèi)大部分是超過兩人出去副本的,在3-4人出去 PK的情況下,引入狀態(tài)回退,會(huì)讓整個(gè)效果大打折扣。不果2人的效果確實(shí)有所改進(jìn),有興趣的同學(xué)可以搜索 Time Warp相關(guān)的論文。

2009年,云游戲(游戲遠(yuǎn)程渲染)技術(shù)得到廣泛應(yīng)用,客戶端上傳操作,服務(wù)端遠(yuǎn)程渲染,并以低延遲視頻編碼流的方式傳回給客戶端,用的就是這樣類似的技術(shù)??蛻舳瞬恍枰哳~的硬件,也不存在盜版問題,其中 Gaikai和 OnLive兩家公司做的比較好。

2012年,Sony推出 Playstation Now技術(shù),可以在 PSV和 PS3/PS4上玩云游戲,玩家不需要購買游戲就可以免費(fèi)體驗(yàn)一定時(shí)間。使得 PSV/PS3等低端硬件也可以流暢的跑 PS4游戲。

但是目前國外網(wǎng)絡(luò)環(huán)境下跑的還比較流暢,國內(nèi)的網(wǎng)絡(luò)環(huán)境要低延遲傳送 HD畫質(zhì)的視頻流還比較困難,視頻都是比較費(fèi)帶寬的。但是幀鎖定等保證每幀輸入一致的算法,在當(dāng)今的網(wǎng)絡(luò)質(zhì)量下傳遞一下玩家操作,還是沒有任何問題的。

總結(jié)

以上是生活随笔為你收集整理的手机格斗网游该如何避免延迟?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。