• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            幀鎖定算法解決游戲同步

            轉(zhuǎn)載自:http://www.joynb.net/blog/archives/131

            幀鎖定算法解決游戲同步

            早期 RTS,XBOX360 LIVE游戲常用同步策略,如何才能像單機游戲一樣編寫網(wǎng)游??


            算法概念

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

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

            這個等待關鍵幀更新數(shù)據(jù)的過程稱為“幀鎖定”
            應用案例:大部分RTS游戲,街霸II(xbox360),Callus模擬器。

            算法流程

            客戶端邏輯:
            1.        判斷當前幀F(xiàn)是否關鍵幀K1:如果不是跳轉(zhuǎn)(7)。
            2.        如果是關鍵幀,則察看有沒有K1的UPDATE數(shù)據(jù),如果沒有的話重復2等待。
            3.        采集當前K1的輸入作為CTRL數(shù)據(jù)與K1編號一起發(fā)送給服務器
            4.        從UPDATE K1中得到下一個關鍵幀的號碼K2以及到下一個關鍵幀之間的輸入數(shù)據(jù)I。
            5.        從這個關鍵幀到下 一個關鍵幀K2之間的虛擬輸入都用I。
            6.        令K1 = K2。
            7.        執(zhí)行該幀邏輯
            8.        跳轉(zhuǎn)(1)

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

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

            算法演示

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

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

            最后這張圖是運行KOF99的效果圖,兩邊完美同步。


            posted on 2013-07-25 16:03 楊粼波 閱讀(1922) 評論(0)  編輯 收藏 引用

            亚洲精品乱码久久久久久按摩| 久久久久中文字幕| 色妞色综合久久夜夜| 久久综合香蕉国产蜜臀AV| 久久精品成人免费网站| 久久精品国产黑森林| 天天躁日日躁狠狠久久| 国产精品热久久无码av| 97精品伊人久久大香线蕉| 91久久精一区二区三区大全| 久久嫩草影院免费看夜色| 久久99精品国产麻豆| 久久se这里只有精品| 无码日韩人妻精品久久蜜桃 | 久久久久亚洲AV无码网站| 国产精品久久国产精品99盘 | 国产午夜精品久久久久九九| 7777精品伊人久久久大香线蕉| 久久精品国产69国产精品亚洲| 欧美日韩精品久久免费| 99久久精品费精品国产一区二区| 色综合久久夜色精品国产| 欧美精品丝袜久久久中文字幕| 久久人人妻人人爽人人爽| 欧美精品丝袜久久久中文字幕| 久久美女人爽女人爽| 久久综合给久久狠狠97色| 久久精品无码一区二区WWW| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区| 久久久国产乱子伦精品作者| 久久强奷乱码老熟女网站| 欧美日韩成人精品久久久免费看| 色综合久久天天综合| 国产成人综合久久综合| 精品久久久久久亚洲精品| 久久久久久久久无码精品亚洲日韩 | 国产精品久久久99| 91精品无码久久久久久五月天| 久久国产精品成人免费| 99久久精品日本一区二区免费| av无码久久久久久不卡网站|