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

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2015年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345


專注即時(shí)通訊及網(wǎng)游服務(wù)端編程
------------------------------------
Openresty 官方模塊
Openresty 標(biāo)準(zhǔn)模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉(zhuǎn)載,并在文章開頭給出了原文出處,如有再轉(zhuǎn),敬請保留相關(guān)信息,這是大家對原創(chuàng)作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 220943
  • 排名 - 117

最新評論

閱讀排行榜

http://www.gameres.com/335685.html
1. 客戶端地圖格子的相關(guān)知識

  在2.5D的MMO游戲里,角色是通過3D的方式渲染,2D的地圖是通過2D的方式顯示,所以在客戶端一般會有三個(gè)坐標(biāo)系:


a) 3D坐標(biāo)系:所有需要3D渲染的角色和光效,都以3D坐標(biāo)系中定位。

b) 2D坐標(biāo)系:用來定位和繪制固定的2D地圖元素,比如草皮、馬路等。

c) 3D坐標(biāo)里的格子坐標(biāo)系:用來實(shí)現(xiàn)打掩碼、自動尋路和進(jìn)行一些坐標(biāo)配置(比如NPC和怪物初始的位置)。使用格子坐標(biāo),一是為了方便打掩碼和進(jìn)行自動尋路的計(jì)算(經(jīng)典的A*尋路),二是為了更方便查找坐標(biāo)的具體位置。


  端游使用的格子大小一般為(64, 32),手游的精確度要求低一些,可以用(100, 50),即3D坐標(biāo)系里長為100寬為50的矩形,即是格子坐標(biāo)系里的一個(gè)坐標(biāo)。示例圖如下:


一款已上市MMO手游地圖同步方案總結(jié)

 


2. 服務(wù)器同步大格子:9宮格

  MMO游戲里,玩家要能看到地圖上所有角色的行為,這就需要將其它玩家的動作都通過網(wǎng)絡(luò)數(shù)據(jù)同步過來。同步一般使用9宮格來確定,哪些玩家的數(shù)據(jù)要同步過來,然后自己的行為要同步給哪些玩家。


  服務(wù)器大格子的大小,以3*3的格子要總比客戶端顯示范圍要大一點(diǎn)為原則。比客戶端大一點(diǎn),是為了預(yù)留資源加載的時(shí)間。


  如下圖所示,綠色表示手機(jī)客戶端的顯示區(qū)域,當(dāng)角色A在格子6中時(shí),他可以看到1,2,3,5,6,7,9,10,11這9個(gè)格子里的內(nèi)容,那么當(dāng)他的狀態(tài)發(fā)生變化時(shí),就需要同步給在這9個(gè)格子里的所有玩家;同樣,當(dāng)這9個(gè)格子里的有玩家或者怪物的狀態(tài)改變時(shí),也需要都同步給角色A。


一款已上市MMO手游地圖同步方案總結(jié)

 


  當(dāng)角色A移動到角色B所在的格子(7),則他將不再看到1,5,9這三個(gè)格子里的內(nèi)容(玩家和怪物),同時(shí)他將新看到4,8,12這三個(gè)格子里的地圖內(nèi)容。所以這個(gè)過程中,服務(wù)器要下發(fā)消息,刪除角色A所在的客戶端里的1,5,9這三個(gè)格子里的地圖內(nèi)容,同時(shí)下發(fā)消息新增4,8,12這三個(gè)格子里的地圖內(nèi)容(類型一)。


  推薦大格子具體的大小,按客戶端iPhone4S的960*640分辨來制定,取屏幕長寬的1/2大一些,可以定為640*360。


3. 角色的移動同步

  地圖上角色的同步可以分為位移的同步和行為(比如放技能)的同步。這里主要討論位移的同步方式。


  位移同步的目的是為了將自己的位置變化發(fā)給服務(wù)器,然后由服務(wù)器通過9宮格的方式轉(zhuǎn)發(fā)給周圍的其他玩家。


  有的端游是以客戶端格子的基本單位進(jìn)行同步,當(dāng)玩家從一個(gè)格子移動到了另一個(gè)格子時(shí),就發(fā)消息通知給服務(wù)器。這種方式的缺點(diǎn)就是:


一、同步的延遲。玩家從一個(gè)格子開始移動,移動到另一個(gè)格子后,才發(fā)消息給服務(wù)器,服務(wù)器再轉(zhuǎn)發(fā)給其它客戶端,那其它客戶端的玩家位置,總會有一點(diǎn)延后。

二、當(dāng)網(wǎng)絡(luò)不穩(wěn)定的時(shí)候,很容易看到其它玩家不是均速的移動,比如玩家位置沒動,然后一下子瞬移到了下一個(gè)格子。


  我們采用的方式,是同步狀態(tài)的變化,然后由客戶端來觸發(fā)服務(wù)器對大格子跨越的判斷:


d) 當(dāng)玩家點(diǎn)擊地圖上某個(gè)地方,或者改變了搖桿方向,玩家的運(yùn)行狀態(tài)就變化了,即向某個(gè)坐標(biāo)點(diǎn)移動。狀態(tài)變化的時(shí)候,客戶端就立即給服務(wù)器發(fā)消息,然后服務(wù)器進(jìn)行轉(zhuǎn)發(fā)。這樣如果忽略了網(wǎng)絡(luò)的延遲,那這個(gè)角色在所有客戶端上,幾乎是同時(shí)開始移動。


  如果移動過程中沒有其它變化,則整個(gè)移動過程中只有一次消息同步。這里需要處理一個(gè)問題,就是服務(wù)器需要知道這個(gè)角色什么時(shí)候跨越了服務(wù)器的同步大格子,當(dāng)角色跨越了同步大格子時(shí),服務(wù)器就需要進(jìn)行第二節(jié)里(類型一)的操作。


e) 如何判斷角色的移動過程中跨越了同步大格子,有的游戲里采用服務(wù)器判斷的方式,即根據(jù)角色的移動速度和方向,計(jì)算出跨越的時(shí)刻,然后使用一個(gè)Timer來觸發(fā)。同時(shí)如果服務(wù)器要取這個(gè)角色的當(dāng)前位置,則需要通過運(yùn)動公式來進(jìn)行計(jì)算。這個(gè)方案相對精確一些,但比較復(fù)雜,服務(wù)器也需要為每一個(gè)移動的角色設(shè)定一個(gè)Timer,對服務(wù)器的性能有所影響。


  我們采用的方式,是由客戶端判斷角色每移動一小段距離,然后發(fā)消息通知服務(wù)器,服務(wù)器不對這個(gè)消息進(jìn)行轉(zhuǎn)發(fā),而只是判斷是否跨越了大格子,同時(shí)記錄下這個(gè)坐標(biāo),作為角色的當(dāng)前位置。這一小段距離可以取100左右,值取得越大時(shí),消息發(fā)送頻率越小,但服務(wù)器的同步大格子跨越判斷和角色當(dāng)前位置就越不精確。


  因?yàn)槭侵苯油降倪\(yùn)行狀態(tài),所以客戶端發(fā)給服務(wù)器的坐標(biāo)單位是3D坐標(biāo)系里單位,而不是3D坐標(biāo)系格子的坐標(biāo)單位。這樣就更加精確,一點(diǎn)點(diǎn)距離的移動,都能準(zhǔn)確同步。


f) 同步運(yùn)動狀態(tài)的一個(gè)問題是,如果玩家操作很頻繁,比如快死了逃跑時(shí),瘋狂地點(diǎn)地圖,這時(shí)運(yùn)動狀態(tài)變化的非常快,如果每個(gè)狀態(tài)的變化都同步給服務(wù)器,再加上廣播,那消息量是很大的。


  所以需要設(shè)置一個(gè)狀態(tài)同步的最短時(shí)間,當(dāng)運(yùn)動狀態(tài)變化很快時(shí),則將狀態(tài)變化的消息緩存在客戶端,同時(shí)加一個(gè)Timer跟蹤。當(dāng)馬上有新的狀態(tài)變化消息出來時(shí),則進(jìn)行替換,同時(shí)更新Timer。當(dāng)沒有狀態(tài)變化的消息出來時(shí),Timer到時(shí)間了就會觸發(fā),將緩存的狀態(tài)變化的消息,發(fā)給服務(wù)器。


  這樣通過消息緩存加上Timer的處理,既實(shí)現(xiàn)了運(yùn)行狀態(tài)同步的最短時(shí)間限制,也保證了最后有效的運(yùn)行狀態(tài)會稍晚一點(diǎn)點(diǎn)發(fā)送給服務(wù)器。


4. 怪物的同步

  怪物的同步在傳統(tǒng)的端游里,是完全由服務(wù)器的怪物AI系統(tǒng)觸發(fā),客戶端只是純粹的接受服務(wù)器下發(fā)的怪物狀態(tài)數(shù)據(jù)。對于手機(jī)游戲里,由于手機(jī)上很難出現(xiàn)像PC里那樣的外掛,所以怪物的AI可以考慮放在客戶端觸發(fā),同時(shí)減少怪物的狀態(tài)同步。詳細(xì)說明如下:


a) 怪物的隨機(jī)移動不同步


  在地圖上,怪物都會有一個(gè)固定的位置。怪物沒有進(jìn)入戰(zhàn)斗狀態(tài)時(shí),就會在這個(gè)固定位置的周圍走來走去,隨機(jī)的移動。這個(gè)隨機(jī)的移動由每個(gè)客戶端自己控制,這樣怪物的隨機(jī)移動,就不用消息廣播進(jìn)行同步了。


  由于客戶端自己控制怪物的隨機(jī)走動,所以會出現(xiàn)不同客戶端里,怪物位置不一樣的問題。但由于怪物隨機(jī)移動的范圍較小,所以這個(gè)問題不是很明顯,在手機(jī)上是可以接受的。角色打怪時(shí),是扇形的傷害范圍,所以即使怪物坐標(biāo)在不同的客戶端有點(diǎn)不一致,打怪的效果也是可以接受的。


b) 怪物的行為同步


  當(dāng)有角色攻擊被動怪物,或者進(jìn)入主動怪物的視野范圍內(nèi)時(shí),怪物的AI就被這個(gè)角色所在的客戶端鎖定了,同時(shí)怪物進(jìn)入攻擊狀態(tài)。攻擊的判斷完全由鎖定怪物AI的客戶端進(jìn)行處理,同時(shí)這個(gè)客戶端會將這個(gè)怪物的行為上發(fā)到服務(wù)器,由服務(wù)器廣播給周圍的其他玩家。


  怪物的AI鎖定,使用搶占式,即誰最先發(fā)消息給服務(wù)器申請怪物的AI鎖定,誰就獲得了怪物的控制權(quán),直到怪物死亡或脫離戰(zhàn)斗狀態(tài)。


  怪物可以每進(jìn)行一次攻擊,客戶端就發(fā)一個(gè)消息給服務(wù)器。這樣做,消息還是有點(diǎn)多,特別是一群怪圍著幾個(gè)角色進(jìn)行攻擊時(shí),消息廣播還是有點(diǎn)多。所以可以將狀態(tài)的概念向上擴(kuò)大,只同步怪物在攻擊哪個(gè)玩家,而不同步每一次的攻擊,然后由每個(gè)客戶端根據(jù)怪物固定的攻擊速度各自去表現(xiàn)。這樣一個(gè)怪去攻擊一個(gè)玩家,就會只有一次消息廣播了。


c) 精英怪和BOSS怪的AI


  精英怪和BOSS怪由于數(shù)量較少,而且比較重要,所以不能由客戶端來申請AI控制權(quán),而是服務(wù)器根據(jù)某種策略來控制。所使用的策略可以考慮角色的傷害值、防御值、角色與BOSS的距離遠(yuǎn)近等,根據(jù)這些因素,服務(wù)器計(jì)算出BOSS怪當(dāng)前最適合攻擊的對象(比如血量最少的玩家,最脆弱的法師等),然后將AI控制權(quán)發(fā)給那個(gè)客戶端,由那個(gè)客戶端控制攻擊行為,同時(shí)通過消息讓服務(wù)器同步給其他玩家。


  總結(jié):怪物的同步方式的選擇,就是要盡量減少消息的廣播,同時(shí)讓游戲效果在可接受的范圍內(nèi)。怪物AI的這個(gè)處理方式,實(shí)際上是同時(shí)省去了游戲服務(wù)器的怪物AI模塊(端游一般是專門用的一個(gè)進(jìn)程或者另外一臺物理服務(wù)器來進(jìn)行怪物AI的計(jì)算),從而簡化了MMO游戲的開發(fā)難度,同時(shí)保證了較好的游戲體驗(yàn)。

posted on 2015-11-30 12:00 思月行云 閱讀(909) 評論(0)  編輯 收藏 引用 所屬分類: MMO
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美电影免费观看| 亚洲欧美国产精品专区久久| 久久一区中文字幕| 亚洲免费电影在线| 久久久91精品国产一区二区精品| 一本综合精品| 亚洲影院免费观看| 日韩香蕉视频| 亚洲视频一区二区免费在线观看| 狠狠色狠狠色综合日日五| 国产精品视频网站| 国产精品一卡二卡| 国产精品电影观看| 国产精品夜夜夜一区二区三区尤| 国产精品免费久久久久久| 国产精品大片wwwwww| 国产欧美日韩一区二区三区在线观看 | 一区二区三区欧美| 在线亚洲欧美视频| 亚洲欧美美女| 女女同性精品视频| 欧美日韩成人| 国产一区二区三区av电影| 亚洲高清自拍| 午夜影院日韩| 亚洲第一主播视频| 午夜精品福利电影| 在线欧美不卡| 免费视频最近日韩| 国模私拍视频一区| 一本色道久久88精品综合| 欧美一区二区三区在线视频 | 欧美午夜精品久久久久久人妖| 国产精品激情电影| 亚洲蜜桃精久久久久久久| 欧美一区二区在线看| 亚洲国产精品精华液2区45| 午夜在线精品| 国产欧美日韩精品专区| 亚洲欧美电影在线观看| 亚洲三级网站| 国产精品福利网站| 午夜精品偷拍| 欧美在线播放视频| 国产综合色产在线精品| 久久九九有精品国产23| 久久国产精品99国产精| 国色天香一区二区| 亚洲国产高清自拍| 国产精品国产自产拍高清av| 欧美一区二区精品| 久久久伊人欧美| 亚洲香蕉网站| 亚洲黄页一区| 亚洲高清一区二| 欧美日本一区二区三区| 午夜欧美精品| 久久综合九色综合欧美狠狠| 亚洲精品日韩久久| 一区二区三区欧美成人| 国产亚洲欧洲| 最新成人av在线| 国产人妖伪娘一区91| 欧美电影免费网站| 国产精品久久久久毛片大屁完整版 | 亚洲国产二区| 国产精品久久一区主播| 久久综合色婷婷| 国产精品你懂的| 欧美国产日韩精品免费观看| 国产精品久久久久高潮| 欧美 日韩 国产精品免费观看| 国产精品v亚洲精品v日韩精品| 噜噜噜躁狠狠躁狠狠精品视频 | 久久九九精品99国产精品| 亚洲理论在线| 欧美成人免费在线| 欧美激情第五页| 亚洲国产mv| 欧美成人69| 激情综合色综合久久| 一本在线高清不卡dvd| 亚洲九九九在线观看| 欧美在线免费播放| 久久午夜影视| 亚洲人妖在线| 欧美日韩一区在线播放| 亚洲视频高清| 久久久国产91| 亚洲七七久久综合桃花剧情介绍| 久久九九热免费视频| 免费日韩一区二区| 一本一本久久a久久精品综合麻豆| 欧美激情在线播放| 一本久道久久综合狠狠爱| 一区二区电影免费观看| 国产区日韩欧美| 久久亚洲精品一区二区| 最新亚洲激情| 久久国产视频网| 一区二区三区精品视频| 国产午夜久久| 欧美日韩国产亚洲一区| 亚洲影院色无极综合| 亚洲国产导航| 美女尤物久久精品| 午夜激情综合网| 亚洲欧洲一区二区三区在线观看 | 午夜精品福利一区二区蜜股av| 久久高清一区| 亚洲视频免费在线观看| 91久久极品少妇xxxxⅹ软件| 国产精品久久久久久影视| 欧美成年人网站| 久久亚洲色图| 久久综合色婷婷| 久久男女视频| 蜜乳av另类精品一区二区| 亚洲欧美日本日韩| 亚洲一区二区三区高清| 亚洲视屏一区| 香蕉成人久久| 久久久久欧美| 欧美高清你懂得| 亚洲精品久久久久久久久久久| 亚洲福利视频网| 91久久极品少妇xxxxⅹ软件| 欧美激情欧美狂野欧美精品| 亚洲第一成人在线| 亚洲精品少妇30p| 亚洲免费综合| 久久久国产精品一区二区中文 | 欧美日韩中文字幕精品| 欧美日韩精品一区二区| 国产欧美69| 日韩午夜在线播放| 亚洲乱亚洲高清| 一区二区国产日产| 一区二区三区**美女毛片 | 亚洲人午夜精品| 亚洲一区二区三区乱码aⅴ蜜桃女| 午夜精品久久久久久| 久久亚洲精品视频| 国产麻豆日韩欧美久久| 影音先锋一区| 久久久综合精品| 亚洲自拍另类| 国产精品免费久久久久久| 91久久在线视频| 久久嫩草精品久久久精品一| 日韩西西人体444www| 女女同性精品视频| 亚洲国产国产亚洲一二三| 欧美激情中文不卡| 韩国视频理论视频久久| 性色av一区二区三区| 亚洲精品资源| 欧美性事免费在线观看| 一本一道久久综合狠狠老精东影业| 卡通动漫国产精品| 久久久久久久成人| 精品动漫av| 亚洲国产免费看| 欧美日韩国产色综合一二三四 | 媚黑女一区二区| 久久国产日韩| 亚洲精品美女在线观看播放| 亚洲精品国产欧美| 欧美午夜一区二区| 久久精品中文字幕免费mv| 久久久久国产一区二区| 亚洲国产精品视频| 一区二区日韩精品| 国产日本欧美在线观看| 久久午夜国产精品| 欧美日韩国产在线| 久久久精品国产免大香伊 | 久久视频一区二区| 欧美成人午夜激情在线| 亚洲欧美日韩一区在线| 欧美成在线视频| 久久精品123| 欧美性一二三区| 亚洲高清不卡在线| 国产欧美一区二区精品秋霞影院| 蜜月aⅴ免费一区二区三区| 欧美午夜免费影院| 亚洲人成人一区二区在线观看| 国内精品模特av私拍在线观看| 亚洲区中文字幕| 亚洲日本一区二区三区| 久久精品国产欧美亚洲人人爽| 亚洲天堂av高清| 欧美精彩视频一区二区三区| 黑人巨大精品欧美黑白配亚洲| 亚洲美女色禁图| 亚洲美女毛片| 国产精品美女黄网| 亚洲欧美激情一区| 久久国产黑丝|