亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

游戲動(dòng)漫 百分網(wǎng)手機(jī)站

揭秘RTS游戲中的同步機(jī)制

時(shí)間:2017-10-29 16:23:56 游戲動(dòng)漫 我要投稿

揭秘RTS游戲中的同步機(jī)制

  RTS游戲有很多,可能大家比較熟悉的有Warcraft III和 StarCraft,帶給我們無限的歡樂和回憶。還有當(dāng)下比較流行l(wèi)ol與dota2,實(shí)際上都是孫子輩的游戲了。RTS游戲同步很重要,而且同步也能非常穩(wěn)定地實(shí)現(xiàn)。那么他們到底是怎么做到高頻操作又同步的呢?下面由yjbys小編來為大家解惑。想了解更多相關(guān)資訊請(qǐng)持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生培訓(xùn)網(wǎng)。

  同步機(jī)制

  假設(shè)游戲中A,B兩個(gè)玩家移動(dòng),并同時(shí)向?qū)Ψ桨l(fā)出射擊指令,如果沒有合適的同步機(jī)制,那么可能出現(xiàn)的情況有:

  · A屏幕顯示B已經(jīng)被殺死,B屏幕顯示A已經(jīng)被殺死

  · 或者在瞄準(zhǔn)后確打不到對(duì)方

  因?yàn)榫W(wǎng)絡(luò)是有延時(shí)的,而每個(gè)玩家的網(wǎng)絡(luò)情況都不盡相同。還有每幀渲染的延遲(早期的計(jì)算機(jī)性能不夠好的時(shí)候 會(huì)出現(xiàn)這個(gè)問題)

  同步機(jī)制最重要的作用就是解決延遲等可能發(fā)生不一致的情況。

  同步機(jī)制的分類

  Peer-to-peer模式

  沒有服務(wù)器,每個(gè)玩家互相連接,各自模擬整個(gè)流程.典型的lockstep模式

  優(yōu)點(diǎn):減少主機(jī)帶來的延時(shí)

  缺點(diǎn):容易作弊

  Client-Server模式

  所有的操作需經(jīng)過服務(wù)器確認(rèn)后才能進(jìn)行客戶端模擬,如arpg傳奇類都是此架構(gòu),如果延時(shí)高就會(huì)有明顯的卡頓。

  優(yōu)點(diǎn):服務(wù)器是絕對(duì)的權(quán)威,可以防止作弊,可以做更多的管理與限制

  缺點(diǎn):服務(wù)器變的更復(fù)雜,服務(wù)器斷線,所有玩家斷線,屬于服務(wù)器依賴型。

  早期的RTS游戲大多采用Lockstep方案來設(shè)計(jì),像羅馬帝國,沙丘之類。

  就是說玩家的數(shù)據(jù)每個(gè)時(shí)間段同步一次,同步的走。

  標(biāo)準(zhǔn)的lockstep模式

  · 每個(gè)玩家互相連接,整個(gè)游戲過程劃分成一組turn指令幀,由玩家自我模擬

  · 游戲速度取決于網(wǎng)絡(luò)最慢的那個(gè)玩家

  · 一個(gè)玩家掉線不會(huì)影響到其他玩家

  什么是Turn?

  一個(gè)turn可以理解成1個(gè)回合,相信大家都玩過回合制游戲吧,只是這個(gè)turn非常短,大概100MS-200MS。玩家相互之間發(fā)送的指令在每個(gè)turn間隔發(fā)出。

  每個(gè)玩家只需要接收指令,并在本地播放指令就可以啦。

  War3如何運(yùn)算傷害?

  玩家到底是發(fā)送什么指令到主機(jī),主機(jī)到底參與了什么計(jì)算呢?

  實(shí)際上玩家都只需要發(fā)送基本的指令如選擇單位,移動(dòng)單位,使用技能1234,點(diǎn)擊物品欄1-6,可以通過APM查看 軟件看到一些基本操作事件。

  也就是說所有的一切傷害計(jì)算都是在本地計(jì)算完成的。

  包括傷害,暴擊,命中,刷怪等,只要初始化好隨機(jī)數(shù)種子就可以啦。

  玩家只是發(fā)送操作指令,如點(diǎn)擊坐標(biāo)(0,1, 0),左鍵框選(100,100,50,50)等。

  每個(gè)玩家都在模擬全部的流程。

  那么War3到底算不算使用lockstep模式,或者是特殊的client-server?

  其實(shí)可以通過幾個(gè)問題判斷出:

  · 非主機(jī)玩家卡是否可以影響到其他玩家,如果不會(huì),那么更可能是client-server模式

  · 可以通過抓包工具攔截網(wǎng)絡(luò)數(shù)據(jù)包的流向,來判斷是否是peer to peer的連接方式還是只連接到主機(jī)(或通過主機(jī)強(qiáng)制掉線方式判斷)。

  個(gè)人也認(rèn)為War3是基于Client-Server的一種的特殊模式,主機(jī)肯定需要驗(yàn)證一些邏輯。

  主機(jī)負(fù)責(zé)廣播每個(gè)client的指令,

  這存在兩個(gè)問題:

  · 本機(jī)(非主機(jī))發(fā)出的指令,如果超時(shí)或者丟包,是否直接丟棄?

  · 其他玩家的`指令,主機(jī)轉(zhuǎn)發(fā)未成功確認(rèn),如何處理?

  第一個(gè)問題

  1.如果是本機(jī)(非主機(jī))發(fā)出的指令超時(shí),可以直接丟棄。(如果不丟棄,其他玩家就必須等待結(jié)果,這樣會(huì)導(dǎo)致掛起,而且會(huì)非常頻繁,這里還有udp協(xié)議容易丟包的原因,但是war3好像并沒有經(jīng)常性的掛起)

  還有一種可能,客戶端得知之前的turn沒有發(fā)送成功,把當(dāng)前這輪的指令和上一輪的指令進(jìn)行合并,然后一起發(fā)出,這樣本地客戶端就不會(huì)有任何的異樣了。

  例如玩家移動(dòng)到A后再移動(dòng)到B

  上個(gè)turn的指令是移動(dòng)到A點(diǎn),但是沒有發(fā)成功,下個(gè)turn的指令先移動(dòng)到A,再移動(dòng)到B,這樣在客戶端就不會(huì)有 丟失的感覺啦,還是可以正常的模擬而不會(huì)影響到其他玩家。

  2. 收其他玩家的指令超時(shí),那么屬于我們自身網(wǎng)絡(luò)的問題,如果丟棄必將導(dǎo)致游戲進(jìn)程不同步,所以服務(wù)器必須將他們的turn指令都緩存起來,

  或者緩存一部分turn指令集,在我網(wǎng)絡(luò)穩(wěn)定的時(shí)候,把丟失的那一部分turn指令集發(fā)給我,而我只需要下載那個(gè)list加快gameupdate就好啦。

  關(guān)于外掛的問題

  相信玩過魔獸的人基本都用過,實(shí)際上像戰(zhàn)爭迷霧,顯示單位等只會(huì)保存一個(gè)狀態(tài)值在內(nèi)存中,只要定位到內(nèi)存地址,改一下變量值就好了,一般是服務(wù)器是不會(huì)檢測這個(gè)的。

  而攻擊力,道具數(shù)量等,由于大家都需要模擬,你本地修改了,會(huì)影響到其他人,程序就會(huì)發(fā)生蝴蝶效應(yīng)。

  至于現(xiàn)在非常流行的 Dota2 和 英雄聯(lián)盟,會(huì)額外的加入更多服務(wù)器來驗(yàn)證和計(jì)算一些外部數(shù)據(jù),但內(nèi)部原理是一致的,早期的游戲與現(xiàn)在的網(wǎng)游不可同日而語。

【揭秘RTS游戲中的同步機(jī)制】相關(guān)文章:

1.盤點(diǎn)游戲中的活動(dòng)需求

2.黃梅戲中的咬字技巧

3.盤點(diǎn)游戲中趣味的死亡方式

4.深入解讀游戲中的敘事手法

5.揭秘喝咖啡的原則

6.侗族舞蹈的特點(diǎn)揭秘

7.揭秘淘寶的搜索原理

8.留學(xué)美國的真相揭秘