青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

永遠(yuǎn)也不完美的程序

不斷學(xué)習(xí),不斷實(shí)踐,不斷的重構(gòu)……

常用鏈接

統(tǒng)計(jì)

積分與排名

好友鏈接

最新評(píng)論

網(wǎng)絡(luò)游戲的位置同步(轉(zhuǎn)載)

有關(guān)位置同步的方案實(shí)際上已經(jīng)比較成熟,網(wǎng)上也有比較多的資料可供參考。在《帶寬限制下的視覺(jué)實(shí)體屬性傳播》一文中,作者也簡(jiǎn)單提到了位置同步方案的構(gòu)造過(guò)程,但涉及到細(xì)節(jié)的地方?jīng)]有深入,這里專(zhuān)門(mén)針對(duì)這一主題做些回顧。

  最直接的同步方案就是客戶(hù)端在每次發(fā)生位置改變時(shí)都向服務(wù)器報(bào)告 ,服務(wù)器再轉(zhuǎn)發(fā)給周?chē)钠渌婕遥渌蛻?hù)端將對(duì)應(yīng)的游戲?qū)嶓w移動(dòng)到新的位置上。

  但是這樣存在一個(gè)問(wèn)題,每個(gè)玩家的位置都是自己先開(kāi)始移動(dòng),一段時(shí)間之后才在其他玩家的客戶(hù)端上表現(xiàn)出來(lái)。如果只是希望每個(gè)客戶(hù)端上看到的游戲?qū)ο蠖纪瑫r(shí)開(kāi)始移動(dòng),那可以讓玩家的每一步操作都由服務(wù)器確認(rèn)之后再執(zhí)行,這樣誤差將縮減到不同客戶(hù)端之間的網(wǎng)絡(luò)延時(shí)差。但是顯然的,這樣的做法不可能真正被采用,因?yàn)檫@將使得玩家的游戲體驗(yàn)非常的糟糕。有誰(shuí)能忍受連每走一步路都要卡一下的游戲呢?

  既然一定存在先后時(shí)間差,那需要一種方法來(lái)讓不同客戶(hù)端上看到的玩家位置不至于有太大的誤差,尤其是不能有影響到游戲公平性的誤差存在。根據(jù)誤差出現(xiàn)的直接原因:時(shí)間差,我們應(yīng)該能夠想到一個(gè)解決方案,那就是讓其他客戶(hù)端設(shè)法彌補(bǔ)掉這段時(shí)間差內(nèi)少走的距離。這樣的話(huà)也就要求我們的消息包中多帶一個(gè)開(kāi)始移動(dòng)的時(shí)間數(shù)據(jù),用于其他客戶(hù)端在收到這個(gè)消息包時(shí)計(jì)算對(duì)應(yīng)的玩家實(shí)體已經(jīng)移動(dòng)過(guò)的時(shí)間和距離。

  我們以一個(gè)實(shí)際的例子來(lái)說(shuō)明如何減少這種誤差的影響。假設(shè)玩家A以速度V從P1點(diǎn)去到P2點(diǎn),A的網(wǎng)絡(luò)延時(shí)為T(mén)1,在A旁邊有個(gè)玩家B,他的網(wǎng)絡(luò)延時(shí)為T(mén)2。B收到服務(wù)器轉(zhuǎn)發(fā)過(guò)來(lái)的移動(dòng)包時(shí),A在其自己的客戶(hù)端上已經(jīng)移動(dòng)了T1+T2的時(shí)間,在這段時(shí)間內(nèi)他自己已經(jīng)走過(guò)了V*(T1+T2)的距離。如果這時(shí)在B的客戶(hù)端上開(kāi)始將實(shí)體A從P1移動(dòng)到P2,那顯然兩個(gè)客戶(hù)端上看到的A的位置始終存在V*(T1+T2)的誤差。

  為了使A在B客戶(hù)端上顯示的位置與其實(shí)際位置的誤差盡可能的縮小,一個(gè)簡(jiǎn)單的做法是直接將A的位置向前拖V*(T1+T2)然后開(kāi)始移動(dòng),這樣兩者之間的誤差便消除了。但這樣會(huì)使得客戶(hù)端的顯示太魯莽,要讓其看起來(lái)平滑一些,我們可以考慮使用一些算法,比如計(jì)算出A從當(dāng)前位置走到P2點(diǎn)還需要的時(shí)間,然后加快其速度使其在規(guī)定的時(shí)間內(nèi)到達(dá)P2點(diǎn),這樣A和B看到的最終時(shí)間是相同的,但中間過(guò)程還是存在較多誤差。另一種較好的做法是先讓A以一個(gè)可接受的較快速度移動(dòng)到其當(dāng)前應(yīng)該所在的位置稍前一點(diǎn)的地方,然后以正常速度移動(dòng)到P2點(diǎn),這樣后面的移動(dòng)情況與其實(shí)際移動(dòng)情況基本吻合了。

  看起來(lái)這個(gè)方案很完美,但是這里卻忽略了一個(gè)問(wèn)題:我們假設(shè)的是每次移動(dòng)時(shí)都知道玩家要去的確切位置。這在靠鼠標(biāo)點(diǎn)擊來(lái)移動(dòng)的2D游戲中是正好合適的,但是在WOW一類(lèi)的靠鍵盤(pán)來(lái)移動(dòng)的3D游戲中卻沒(méi)有辦法采用。WOW中的移動(dòng)消息都只能向服務(wù)器報(bào)告當(dāng)前的坐標(biāo)及朝向信息。

  這類(lèi)移動(dòng)的位置同步其實(shí)也可以采用類(lèi)似方案,服務(wù)器將移動(dòng)玩家的當(dāng)前位置信息廣播給周?chē)钠渌婕遥?dāng)然其中也包含了時(shí)間戳。當(dāng)其他玩家收到這個(gè)移動(dòng)包后,表示的是在過(guò)去的某個(gè)時(shí)間里該玩家移動(dòng)到了這個(gè)位置。如果只是簡(jiǎn)單地將其對(duì)應(yīng)的實(shí)體移動(dòng)到這個(gè)位置,那同樣的,也存在位置誤差。

  與上一種情況類(lèi)似,如果我們知道該玩家的移動(dòng)速度,再通過(guò)數(shù)據(jù)包中的時(shí)間戳,假設(shè)該玩家還在以相同的速度朝相同的方向移動(dòng),那我們也可以預(yù)測(cè)出該玩家從開(kāi)始移動(dòng)到現(xiàn)在這段時(shí)間內(nèi)他走了多遠(yuǎn)了距離。我們也可以將其位置做適當(dāng)?shù)男拚⑹蛊淅^續(xù)移動(dòng)下去。

  我們需要先停下來(lái)考慮一下這些算法的部分細(xì)節(jié)。其中出現(xiàn)了一些數(shù)據(jù)是否應(yīng)該包含在我們的每個(gè)消息包中,也就是我們需要考慮的另外一個(gè)問(wèn)題:移動(dòng)同步的消息中應(yīng)該包含哪些數(shù)據(jù),以及這些數(shù)據(jù)到底應(yīng)該向哪些玩家廣播。

  對(duì)于2D游戲的情況來(lái)說(shuō),我們的算法需要的數(shù)據(jù)有:玩家的速度V,玩家開(kāi)始移動(dòng)的時(shí)間T0,收到數(shù)據(jù)包的時(shí)間T1,玩家當(dāng)前位置P1和玩家要去的位置P2。T1和P1從當(dāng)前客戶(hù)端上都可以取到,而速度V一般來(lái)說(shuō)不會(huì)經(jīng)常改變,至少不是每次移動(dòng)時(shí)都不一樣,所以我們可以為速度的改變?cè)O(shè)計(jì)單獨(dú)的消息碼,這樣V值也是可以在客戶(hù)端上取到的。最后,每個(gè)移動(dòng)消息中包含的數(shù)據(jù)只需要有移動(dòng)到的位置P2和開(kāi)始移動(dòng)的時(shí)間T0。

  其他客戶(hù)端在使用特定算法將玩家移動(dòng)到P2后會(huì)將其停在此處,直到收到下一個(gè)移動(dòng)包時(shí)再開(kāi)始移動(dòng)。而對(duì)于在移動(dòng)過(guò)程中又收到了新的移動(dòng)包的處理過(guò)程基本類(lèi)似,不做過(guò)多描述。

  對(duì)于3D游戲的情況,算法是基本相同的,但是沒(méi)有目標(biāo)點(diǎn),替換為移動(dòng)方向,比如是向正前方移動(dòng),還是向左或向右移動(dòng)等。在這種情況下,只要沒(méi)有收到玩家停止移動(dòng)的消息,其他客戶(hù)端上都會(huì)以最后一次收到的移動(dòng)包的狀態(tài)來(lái)繼續(xù)模擬移動(dòng)。

  所以,在網(wǎng)絡(luò)偶爾卡一下的時(shí)候也會(huì)出現(xiàn)一些奇怪的現(xiàn)象。比如WOW中,看到隊(duì)友直沖沖地走下了懸崖,你剛喊了句“怎么掉下去了?”只見(jiàn)隊(duì)友又從身后走出來(lái),還冒出一句:“沒(méi)啊,我就在你旁邊!”

  關(guān)于數(shù)據(jù)要向哪些人廣播的問(wèn)題,其實(shí)很簡(jiǎn)單,哪些人會(huì)看到這個(gè)玩家就需要向哪些人廣播。不管是直接在主屏幕上看到還是在大地圖上看到的代表其位置的一個(gè)點(diǎn)。但是,針對(duì)不同的人使用的廣播策略還是存在差異。

  在《帶寬限制下的視覺(jué)實(shí)體屬性傳播》一文中提出了一個(gè)方案很值得參考。該方案提出的基礎(chǔ)是因?yàn)?D空間透視的原因,離你很遠(yuǎn)的一個(gè)玩家移動(dòng)了10米,最終在你的顯示器上看到的位移可能只有一個(gè)象素;而離你不到一米的一個(gè)玩家雖然只移動(dòng)了一米,但最終顯示出來(lái)的位移可能會(huì)有幾十個(gè)象素。所以,遠(yuǎn)處玩家的移動(dòng)并不需要非常嚴(yán)格的關(guān)注,但近處玩家的移動(dòng)同步需要非常高的優(yōu)先級(jí)。

  這個(gè)方案的實(shí)現(xiàn)還依賴(lài)于另一項(xiàng)技術(shù)要求,玩家的屬性更新以一定的頻率來(lái)進(jìn)行,更新時(shí)比較一下當(dāng)前屬性值與上次更新時(shí)的屬性值,如果存在差異則通知客戶(hù)端更新,另外如果中間跳過(guò)了某次更新也不會(huì)對(duì)客戶(hù)端表現(xiàn)及游戲公平性造成什么影響。比如這里要處理的玩家坐標(biāo),第一次移動(dòng)到A點(diǎn),第二次從A點(diǎn)又移動(dòng)到B點(diǎn),如果移動(dòng)到A點(diǎn)的更新包沒(méi)有發(fā)送,直接發(fā)送了移動(dòng)到B點(diǎn)的更新包,這將不會(huì)對(duì)游戲邏輯產(chǎn)生大的影響。

  這套方案基本上是為3D游戲的實(shí)體屬性廣播優(yōu)化而設(shè)計(jì)的,在2D游戲中很難使用。一是斜45度視角的2D游戲中屏幕頂端、中間和底部任何一個(gè)位置上的玩家移動(dòng),其距離和象素比是完全相同的,因?yàn)楫?huà)面不存在透視,所以也就沒(méi)有遠(yuǎn)處對(duì)象更新頻率低這一可能。另外2D游戲中的移動(dòng)與3D游戲也存在差異,具體情況前面有詳細(xì)描述,2D游戲中基本上每一次移動(dòng)都需要廣播,不能跳過(guò)哪一個(gè),否則玩家看到的現(xiàn)象就是在亂跑,這也必將影響到技能的使用等游戲邏輯。

  有關(guān)位置同步所涉及到的一些技術(shù)細(xì)節(jié)及優(yōu)化方案上面描述了一部分,但是在實(shí)際的應(yīng)用中是否會(huì)使用還是要看具體游戲的需求。比如大話(huà)類(lèi)型的游戲,其本身對(duì)位置的精確同步就沒(méi)有要求,兩個(gè)客戶(hù)端上出現(xiàn)一前一后的移動(dòng)也不會(huì)影響任何的游戲邏輯,所以前面提到的同步方案可能都用不上。

  而對(duì)于一些同步要求很高的游戲,如WOW中盜賊這類(lèi)職業(yè)的需求,上面的方案可能還不夠細(xì)致,還需要設(shè)計(jì)更加有效的同步方案。

  另外,在位置同步過(guò)程中還有一個(gè)不容忽視的問(wèn)題是外掛。我們不能像WOW那樣完全依賴(lài)客戶(hù)端,如果沒(méi)有暴雪那樣強(qiáng)硬的封號(hào)措施,游戲也就成為了外掛們的溫床。所以,如何在服務(wù)器端模擬每個(gè)客戶(hù)端的移動(dòng),如何檢測(cè)出客戶(hù)端是否存在作弊行為,也是需要重點(diǎn)關(guān)注的一個(gè)問(wèn)題。

posted on 2008-05-05 11:15 狂爛球 閱讀(218) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一本色道久久88综合亚洲精品ⅰ| 国产一区三区三区| 亚洲欧美日韩第一区| 一区二区三区蜜桃网| 中国av一区| 久久精品1区| 久久综合综合久久综合| 欧美黄免费看| 国产噜噜噜噜噜久久久久久久久| 国产欧美一区二区精品仙草咪| 国色天香一区二区| 亚洲精品乱码久久久久久| 一本久久综合亚洲鲁鲁五月天 | 狠狠爱综合网| 亚洲国产日韩欧美在线图片 | 欧美国产第二页| 亚洲国产高清视频| 一区二区三区 在线观看视| 欧美一区二区三区精品| 老司机免费视频一区二区| 欧美日韩一区在线| 一区二区在线不卡| 亚洲已满18点击进入久久| 久久综合给合久久狠狠狠97色69| 亚洲激情网址| 性做久久久久久久久| 欧美伦理视频网站| 国产日韩欧美精品在线| 亚洲美女视频| 男女视频一区二区| 亚洲一区三区在线观看| 免费亚洲视频| 国产一区自拍视频| 亚洲专区免费| 最新中文字幕亚洲| 久久一二三四| 国产真实久久| 性欧美暴力猛交另类hd| 亚洲区欧美区| 嫩模写真一区二区三区三州| 国产精品午夜视频| 亚洲一级一区| 亚洲乱码久久| 欧美日本一区| 日韩午夜精品视频| 亚洲第一区中文99精品| 久久亚洲国产精品日日av夜夜| 国产精品久久久久一区二区| 日韩午夜黄色| 亚洲日本在线视频观看| 欧美成人激情视频| 亚洲欧洲一区二区在线播放| 美玉足脚交一区二区三区图片| 亚洲欧美国产视频| 国产精品一区二区在线观看不卡| 亚洲一区三区电影在线观看| 一区二区三区精品视频在线观看| 欧美日本三区| 亚洲性人人天天夜夜摸| 一区二区高清在线观看| 欧美视频在线观看 亚洲欧| 中国日韩欧美久久久久久久久| 最新日韩精品| 欧美丝袜一区二区三区| 亚洲欧美日韩另类| 欧美亚洲日本一区| 在线观看成人一级片| 欧美激情一区二区| 欧美日韩播放| 欧美一区二区三区四区高清| 欧美在线91| 亚洲国产日韩欧美在线99| 最新日韩欧美| 国产欧美精品在线观看| 免费不卡视频| 国产精品99久久久久久人| 欧美日韩精品在线视频| 亚洲影视综合| 久久国产66| 亚洲免费观看在线观看| 一本一道久久综合狠狠老精东影业| 国产精品久久久久久久久免费樱桃 | 亚洲理论电影网| 国产精品女主播在线观看 | 中日韩在线视频| 国产一区清纯| 亚洲第一中文字幕| 国产精品二区三区四区| 久久午夜电影网| 欧美精品免费观看二区| 午夜精品一区二区在线观看 | 亚洲欧美文学| 久久影视三级福利片| 亚洲淫性视频| 久久久久久久一区| 亚洲网友自拍| 另类天堂av| 午夜精品视频一区| 欧美激情91| 久久久久久久精| 欧美日韩国产电影| 欧美不卡高清| 国产日韩精品一区二区三区| 亚洲国产精品va在线看黑人动漫| 国产精品嫩草久久久久| 亚洲欧洲在线免费| 国产日韩欧美一二三区| 亚洲人成毛片在线播放女女| 国模精品娜娜一二三区| 一区二区三区 在线观看视| 亚洲黄色高清| 久久九九精品99国产精品| 午夜精品久久| 欧美日韩网址| 亚洲国产精品悠悠久久琪琪 | 亚洲免费在线观看视频| 欧美久久成人| 亚洲国产一区在线| 伊人久久噜噜噜躁狠狠躁| 亚洲欧美国产三级| 亚洲永久免费精品| 欧美日韩国产91| 最新精品在线| 日韩午夜av| 欧美伦理影院| 日韩网站在线观看| 亚洲精品国产精品国自产观看| 久久久久se| 久久视频在线看| 狠狠综合久久av一区二区小说 | 久久九九国产精品| 久热re这里精品视频在线6| 国产视频综合在线| 欧美va天堂在线| 精品成人在线视频| 欧美在线91| 免费人成网站在线观看欧美高清| 国内精品久久久久影院薰衣草| 亚洲欧美日韩中文播放| 欧美影视一区| 黄色在线成人| 欧美 日韩 国产一区二区在线视频| 久久一二三区| 在线免费观看成人网| 蜜臀91精品一区二区三区| 欧美国产精品日韩| 99精品国产高清一区二区| 欧美人成网站| 国产精品99久久久久久久vr | 一区二区三区四区五区视频| 亚洲在线一区| 韩国av一区二区三区四区| 快she精品国产999| 亚洲精品中文字幕有码专区| 亚洲午夜电影网| 国产亚洲一区二区三区在线播放| 久久精品一区四区| 亚洲日本中文| 久久九九精品99国产精品| 亚洲国产成人av在线| 欧美三级欧美一级| 久久精品免费播放| 99精品国产在热久久下载| 久久激情婷婷| 一区二区三区国产在线| 国产一区二区成人| 欧美伦理91i| 久久国产一区| av成人手机在线| 久热这里只精品99re8久| 日韩图片一区| 激情视频一区| 国产精品免费视频xxxx| 欧美成人高清| 久久精品一区二区国产| 一区二区精品在线| 免费一区二区三区| 亚洲欧美日韩在线| 亚洲日韩欧美一区二区在线| 国产欧美不卡| 欧美日韩三级视频| 葵司免费一区二区三区四区五区| 一区二区三区国产精品| 欧美二区不卡| 久久久999精品| 欧美亚洲视频一区二区| 一本大道av伊人久久综合| 伊人久久久大香线蕉综合直播 | 亚洲大片免费看| 欧美专区在线| 亚洲欧美电影在线观看| 亚洲精品偷拍| 亚洲国产精品久久久| 国产一区二区中文字幕免费看| 欧美三区不卡| 欧美视频一区二区三区在线观看| 免费在线看一区| 另类天堂av| 免费在线看成人av| 久久综合99re88久久爱|