• <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>

            飯中淹的避難所~~~~~

            偶爾來避難的地方~

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              94 隨筆 :: 0 文章 :: 257 評(píng)論 :: 0 Trackbacks
            對(duì)于基于格子的mmorpg來說,按照格子來存儲(chǔ)周圍所見的物件,是一個(gè)比較好的選擇。

            但是,由于主角的移動(dòng),常常要對(duì)格子里的物件進(jìn)行搬移,這大大影響了處理效率。

            今天介紹一種方法來優(yōu)化這個(gè)搬移操作。


            (1)-  名字
                  偏移網(wǎng)格,從字面上來講,就是使用偏移量來進(jìn)行處理和計(jì)算的網(wǎng)格。實(shí)際上,也是這么做的。這個(gè)方法保存了角色看得到的格子里的所有物件,并且確保離開視野的物件被及時(shí)地清理出去,以及在這個(gè)視野切換過程中不動(dòng)的物件牢牢地呆在原地,而不用對(duì)他們進(jìn)行搬移。

            (2)-  原理
                  首先,讓我們先來看看下面這張圖示(簡(jiǎn)單起見,只假設(shè)玩家能看到1格的范圍):



                  一開始,我們的主角在 5 號(hào)位置,他能看到 1 2 3 4 5 6 7 8 9 這9個(gè)格子的物件。接下來,他移動(dòng)到了9號(hào)位置,他現(xiàn)在看不到1,2,3,4,7格內(nèi)的物件了,而他又看到了 A,B,C,D,E 格內(nèi)的東西。
                 這個(gè)過程中,如果用老方法,我們需要把一個(gè) 3 x 3 的格子數(shù)組中的 5,6,8,9 格子內(nèi)的物件搬移到原來 1,2,4,5 的格子內(nèi),同時(shí)還要清理那里原來的物件。然后清理 3,6,9,8,7格子,把 A, B, C, D, E 格子中的物件丟到原來 3, 6, 9, 8, 7 的格子內(nèi)。
                  現(xiàn)在,我們換一種思路,原來1號(hào)格子,做為數(shù)組的原點(diǎn),而現(xiàn)在,我們分離出兩個(gè)原點(diǎn):一個(gè)物理原點(diǎn),也就是格子數(shù)組的起始點(diǎn);另一個(gè)是邏輯原點(diǎn),也就是當(dāng)前主角的可是范圍的原點(diǎn)。在從 5 到 9 的移動(dòng)完成之后,5 就變成了主角的邏輯原點(diǎn)了,那么這個(gè)邏輯原點(diǎn)記作(1,1),也就是表示,主角可視范圍的原點(diǎn)是在物理數(shù)組的 (1,1)位置上。這時(shí)候,我們就不用去進(jìn)行 5,6,8,9 到 1,2,4,5 的搬移了,因?yàn)樗麄冊(cè)谶壿嬙c(diǎn)所確定的視覺范圍內(nèi)的位置已經(jīng)隨著邏輯原點(diǎn)從位置1(0,0)到位置5(1,1)的更新而更新了。那么,接下來,就是去安排新看到的 A,B,C,D,E了。這里用的是一個(gè)循環(huán)計(jì)數(shù),也就是當(dāng)物理格子數(shù)組越界之后,把他們折到數(shù)組界內(nèi),比如字節(jié)范圍內(nèi)的 254+2 之后,會(huì)被折返成 254+2-255 = 1。這里,他們被折返到原來 1,2,3,4,7 的位置。
                  經(jīng)過這樣一個(gè)過程之后,我們看到,新的思路下,我們會(huì)減少4次搬移的操作,這擴(kuò)展到正常數(shù)量的格子之后,我們可以消減掉很大的一個(gè)雙重循環(huán)和搬移操作。

            (3)- 總結(jié)
                  從圖上可以看出,這個(gè)算法的精髓就是用兩個(gè)網(wǎng)格數(shù)組和一個(gè)偏移進(jìn)行工作,從而減少一些實(shí)際的操作。也正是因?yàn)槿绱?,所以,我才叫這個(gè)方法是偏移網(wǎng)格。
            posted on 2008-04-20 01:28 飯中淹 閱讀(1542) 評(píng)論(2)  編輯 收藏 引用

            評(píng)論

            # re: MMORPG客戶端技巧(1) - 偏移網(wǎng)格[未登錄] 2008-04-21 09:02 christanxw
            只是主角移動(dòng)而已,為什么要搬移對(duì)周圍的固定物件?  回復(fù)  更多評(píng)論
              

            # re: MMORPG客戶端技巧(1) - 偏移網(wǎng)格 2010-04-06 10:22 wangwan
            是啊,不解,不解,搬移周圍的是因?yàn)橹車木拔锊辉诋?dāng)前屏幕范圍之內(nèi),要卷屏  回復(fù)  更多評(píng)論
              


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


            久久国产精品-国产精品| 久久成人永久免费播放| 婷婷久久久亚洲欧洲日产国码AV | 激情久久久久久久久久| 久久99热这里只有精品国产| 久久久久久国产a免费观看不卡| 午夜精品久久久内射近拍高清| 无码国内精品久久人妻| 丁香五月综合久久激情| 久久综合视频网| 久久99国产综合精品免费| 国产精品免费久久久久影院| 亚洲国产另类久久久精品| 久久福利青草精品资源站| 狠狠色丁香婷婷久久综合五月| 国产69精品久久久久777| 亚洲国产一成久久精品国产成人综合| 久久精品国产亚洲AV高清热| 亚洲精品无码久久不卡| 久久99精品免费一区二区| 丰满少妇高潮惨叫久久久| 国产激情久久久久久熟女老人 | 久久综合伊人77777麻豆| 久久精品国产亚洲沈樵| 久久亚洲国产精品成人AV秋霞| 国产高潮国产高潮久久久91 | 久久亚洲精品视频| 综合人妻久久一区二区精品| 香蕉久久AⅤ一区二区三区| 精品久久久久久无码人妻蜜桃| 国产精品久久自在自线观看| 久久亚洲私人国产精品vA| 囯产精品久久久久久久久蜜桃| 欧美亚洲另类久久综合婷婷 | 亚洲AV日韩精品久久久久| 尹人香蕉久久99天天拍| 亚洲精品美女久久久久99小说 | 久久久久亚洲?V成人无码| 久久久精品午夜免费不卡| 久久精品国产亚洲一区二区| 久久人人爽人人爽人人AV东京热 |