无码日韩精品一区二区三区浪潮_99国产精品久久久久9999高清_亚洲熟妇无码久久观看_亚洲a∨无码一区二区猫咪

微信掃碼登錄

其他登錄方式

綁定手機(jī)號

注冊

忘記密碼

用戶協(xié)議

綁定手機(jī)號

近期有不法分子打著愛盈利的旗號,制作“愛盈利”名稱的App,并偽造愛盈利證件,騙取用戶信任,以抖音點(diǎn)贊賺錢或其他方式賺錢為名義,過程中以升級會員獲得高傭金為名讓用戶充值。
愛盈利公司鄭重聲明:我司沒有研發(fā)或運(yùn)營過任何名為“愛盈利”的APP,我司做任務(wù)賺錢類產(chǎn)品從沒有讓任何普通用戶充值升級會員。我公司產(chǎn)品均在本網(wǎng)站可查詢,請將網(wǎng)站拉至底部,點(diǎn)擊“關(guān)于我們”可查看愛盈利相關(guān)產(chǎn)品與服務(wù)。
溫馨提示:當(dāng)遇到此類問題請撥打官方電話或添加官方微信,以免財(cái)產(chǎn)損失。愛盈利官網(wǎng)地址:www.jza6.com。
  • 推廣與合作
X

手機(jī)格斗網(wǎng)游該如何避免延遲?

來源:游資網(wǎng) 5113

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

算法概念

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

  • 1.客戶端定時(比如每五幀)上傳控制信息。
  • 2.服務(wù)器收到所有控制信息后廣播給所有客戶。
  • 3.客戶端用服務(wù)器發(fā)來的更新消息中的控制信息進(jìn)行游戲。
  • 4.如果客戶端進(jìn)行到下一個關(guān)鍵幀(5幀后)時沒有收到服務(wù)器的更新消息則等待。
  • 5.如果客戶端進(jìn)行到下一個關(guān)鍵幀時已經(jīng)接收到了服務(wù)器的更新消息,則將上面的數(shù)據(jù)用于游戲,并采集當(dāng)前鼠標(biāo)鍵盤輸入發(fā)送給服務(wù)器,同時繼續(xù)進(jìn)行下去。
  • 6.服務(wù)端采集到所有數(shù)據(jù)后再次發(fā)送下一個關(guān)鍵幀更新消息。

這個等待關(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編號一起發(fā)送給服務(wù)器

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

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

令K1 = K2。

格斗網(wǎng)游

 

 

執(zhí)行該幀邏輯:

跳轉(zhuǎn)(1)

服務(wù)端邏輯:

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

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

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

令K1=K2

跳轉(zhuǎn)(1)

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

算法演示

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

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

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

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

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

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

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

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

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

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

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

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

而近兩年動作游戲領(lǐng)域也涌現(xiàn)出一些新的改良方法,比如 Time Warp,以客戶端先行+邏輯不一致時回滾的方式,帶來了更好的同步效果,俗稱時間回退法。不果國內(nèi)暫時沒看到有游戲這么嘗試,更多的是國外近兩年的雙人動作游戲比較多,要求游戲每幀狀態(tài)都可以保存,邏輯上開發(fā)會復(fù)雜一些。國內(nèi)大部分是超過兩人出去副本的,在3-4人出去 PK的情況下,引入狀態(tài)回退,會讓整個效果大打折扣。不果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)一定時間。使得 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ì)量下傳遞一下玩家操作,還是沒有任何問題的。

評論

相關(guān)文章推薦

SELECT dw_posts.ID,dw_posts.post_title,dw_posts.post_content FROM dw_posts INNER JOIN dw_term_relationships ON (dw_posts.ID = dw_term_relationships.object_id) WHERE 1=1 AND(dw_term_relationships.term_taxonomy_id = 410 ) AND dw_posts.post_type = 'post' AND (dw_posts.post_status = 'publish') GROUP BY dw_posts.ID ORDER BY RAND() LIMIT 0, 6

京ICP備15063977號-2 ? 2012-2018 aiyingli.com. All Rights Reserved. 京公網(wǎng)安備 11010102003938號