中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁(yè) > 技術(shù)文檔 > 多媒體制作 > Flash里的 A* Pathfinding
ActionScript 3.0 概要 回到列表 Flash 8 攝像頭拍照
 Flash里的 A* Pathfinding

作者:藍(lán)色月光 時(shí)間: 2005-12-30 文檔類(lèi)型:原創(chuàng) 來(lái)自:藍(lán)色理想

第 1 頁(yè) Chapter 1. 演示及代碼下載
第 2 頁(yè) Chapter 2. 詳細(xì)代碼及說(shuō)明
第 3 頁(yè) Chapter 3. A*尋路初探
第 4 頁(yè) Chapter 4. A*方法總結(jié)

A*方法總結(jié)

好,現(xiàn)在你已經(jīng)看完了整個(gè)說(shuō)明,讓我們把每一步的操作寫(xiě)在一起:

   1,把起始格添加到開(kāi)啟列表。
   2,重復(fù)如下的工作:
      a) 尋找開(kāi)啟列表中F值最低的格子。我們稱(chēng)它為當(dāng)前格。
      b) 把它切換到關(guān)閉列表。
      c) 對(duì)相鄰的8格中的每一個(gè)?
          * 如果它不可通過(guò)或者已經(jīng)在關(guān)閉列表中,略過(guò)它。反之如下。
          * 如果它不在開(kāi)啟列表中,把它添加進(jìn)去。把當(dāng)前格作為這一格的父節(jié)點(diǎn)。記錄這一格的F,G,和H值。
          * 如果它已經(jīng)在開(kāi)啟列表中,用G值為參考檢查新的路徑是否更好。更低的G值意味著更好的路徑。如果是這樣,就把這一格的父節(jié)點(diǎn)改成當(dāng)前格,并且重新計(jì)算這一格的G和F值。如果你保持你的開(kāi)啟列表按F值排序,改變之后你可能需要重新對(duì)開(kāi)啟列表排序。

      d) 停止,當(dāng)你
          * 把目標(biāo)格添加進(jìn)了關(guān)閉列表(注解),這時(shí)候路徑被找到,或者
          * 沒(méi)有找到目標(biāo)格,開(kāi)啟列表已經(jīng)空了。這時(shí)候,路徑不存在。
   3.保存路徑。從目標(biāo)格開(kāi)始,沿著每一格的父節(jié)點(diǎn)移動(dòng)直到回到起始格。這就是你的路徑。


(注解:在這篇文章的較早版本中,建議的做法是當(dāng)目標(biāo)格(或節(jié)點(diǎn))被加入到開(kāi)啟列表,而不是關(guān)閉列表的時(shí)候停止尋路。這么做會(huì)更迅速,而且?guī)缀蹩偸悄苷业阶疃痰穆窂,但不是絕對(duì)的。當(dāng)從倒數(shù)第二個(gè)節(jié)點(diǎn)到最后一個(gè)(目標(biāo)節(jié)點(diǎn))之間的移動(dòng)耗費(fèi)懸殊很大時(shí)-例如剛好有一條河穿越兩個(gè)節(jié)點(diǎn)中間,這時(shí)候舊的做法和新的做法就會(huì)有顯著不同。)

題外話

離題一下,見(jiàn)諒,值得一提的是,當(dāng)你在網(wǎng)上或者相關(guān)論壇看到關(guān)于A*的不同的探討,你有時(shí)會(huì)看到一些被當(dāng)作A*算法的代碼而實(shí)際上他們不是。要使用A*,你必須包含上面討論的所有元素--特定的開(kāi)啟和關(guān)閉列表,用F,G和H作路徑評(píng)價(jià)。有很多其他的尋路算法,但他們并不是A*,A*被認(rèn)為是他們當(dāng)中最好的。Bryan Stout在這篇文章后面的參考文檔中論述了一部分,包括他們的一些優(yōu)點(diǎn)和缺點(diǎn)。有時(shí)候特定的場(chǎng)合其他算法會(huì)更好,但你必須很明確你在作什么。好了,夠多的了;氐轿恼。

實(shí)現(xiàn)的注解

現(xiàn)在你已經(jīng)明白了基本原理,寫(xiě)你的程序的時(shí)候還得考慮一些額外的東西。下面這些材料中的一些引用了我用C++和Blitz Basic寫(xiě)的程序,但對(duì)其他語(yǔ)言寫(xiě)的代碼同樣有效。

1.其他單位(避免碰撞):如果你恰好看了我的例子代碼,你會(huì)發(fā)現(xiàn)它完全忽略了其他單位。我的尋路者事實(shí)上可以相互穿越。取決于具體的游戲,這也許可以,也許不行。如果你打算考慮其他單位,希望他們能互相繞過(guò),我建議你只考慮靜止或那些在計(jì)算路徑時(shí)臨近當(dāng)前單位的單位,把它們當(dāng)前的位置標(biāo)志為可通過(guò)的。對(duì)于臨近的運(yùn)動(dòng)著的單位,你可以通過(guò)懲罰它們各自路徑上的節(jié)點(diǎn),來(lái)鼓勵(lì)這些尋路者找到不同的路徑(更多的描述見(jiàn)#2).

如果你選擇了把其他正在移動(dòng)并且遠(yuǎn)離當(dāng)前尋路單位的那些單位考慮在內(nèi),你將需要實(shí)現(xiàn)一種方法及時(shí)預(yù)測(cè)在何時(shí)何地碰撞可能會(huì)發(fā)生,以便恰當(dāng)?shù)谋苊。否則你極有可能得到一條怪異的路徑,單位突然轉(zhuǎn)彎試圖避免和一個(gè)已經(jīng)不存在的單位發(fā)生碰撞。

當(dāng)然,你也需要寫(xiě)一些碰撞檢測(cè)的代碼,因?yàn)闊o(wú)論計(jì)算的時(shí)候路徑有多完美,它也會(huì)因時(shí)間而改變。當(dāng)碰撞發(fā)生時(shí),一個(gè)單位必須尋找一條新路徑,或者,如果另一個(gè)單位正在移動(dòng)并且不是正面碰撞,在繼續(xù)沿當(dāng)前路徑移動(dòng)之前,等待那個(gè)單位離開(kāi)。

這些提示大概可以讓你開(kāi)始了。如果你想了解更多,這里有些你可能會(huì)覺(jué)得有用的鏈接:

    * 自治角色的指導(dǎo)行為:Craig Reynold在指導(dǎo)能力上的工作和尋路有些不同,但是它可以和尋路整合從而形成更完整的移動(dòng)和碰撞檢測(cè)系統(tǒng)。
    * 電腦游戲中的長(zhǎng)短距指導(dǎo):指導(dǎo)和尋路方面著作的一個(gè)有趣的考察。這是一個(gè)pdf文件。
    * 協(xié)同單位移動(dòng):一個(gè)兩部分系列文章的第一篇,內(nèi)容是關(guān)于編隊(duì)和基于分組的移動(dòng),作者是帝國(guó)時(shí)代(Age of Empires)的設(shè)計(jì)者Dave Pottinger.
    * 實(shí)現(xiàn)協(xié)同移動(dòng):Dave Pottinger文章系列的第二篇。

2. 不同的地形損耗:在這個(gè)教程和我附帶的程序中,地形只能是二者之-可通過(guò)的和不可通過(guò)的。但是你可能會(huì)需要一些可通過(guò)的地形,但是移動(dòng)耗費(fèi)更高-沼澤,小山,地牢的樓梯,等等。這些都是可通過(guò)但是比平坦的開(kāi)闊地移動(dòng)耗費(fèi)更高的地形。類(lèi)似的,道路應(yīng)該比自然地形移動(dòng)耗費(fèi)更低。

這個(gè)問(wèn)題很容易解決,只要在計(jì)算任何地形的G值的時(shí)候增加地形損耗就可以了。簡(jiǎn)單的給它增加一些額外的損耗就可以了。由于A*算法已經(jīng)按照尋找最低耗費(fèi)的路徑來(lái)設(shè)計(jì),所以很容易處理這種情況。在我提供的這個(gè)簡(jiǎn)單的例子里,地形只有可通過(guò)和不可通過(guò)兩種,A*會(huì)找到最短,最直接的路徑。但是在地形耗費(fèi)不同的場(chǎng)合,耗費(fèi)最低的路徑也許會(huì)包含很長(zhǎng)的移動(dòng)距離-就像沿著路繞過(guò)沼澤而不是直接穿過(guò)它。

一種需額外考慮的情況是被專(zhuān)家稱(chēng)之為“influence mapping”的東西(暫譯為影響映射圖)。就像上面描述的不同地形耗費(fèi)一樣,你可以創(chuàng)建一格額外的分?jǐn)?shù)系統(tǒng),并把它應(yīng)用到尋路的AI中。假設(shè)你有一張有大批尋路者的地圖,他們都要通過(guò)某個(gè)山區(qū)。每次電腦生成一條通過(guò)那個(gè)關(guān)口的路徑,它就會(huì)變得更擁擠。如果你愿意,你可以創(chuàng)建一個(gè)影響映射圖對(duì)有大量屠殺事件的格子施以不利影響。這會(huì)讓計(jì)算機(jī)更傾向安全些的路徑,并且?guī)椭苊饪偸莾H僅因?yàn)槁窂蕉?但可能更危險(xiǎn))而持續(xù)把隊(duì)伍和尋路者送到某一特定路徑。

另一個(gè)可能得應(yīng)用是懲罰周?chē)苿?dòng)單位路徑上得節(jié)點(diǎn)。A*的一個(gè)底限是,當(dāng)一群?jiǎn)挝煌瑫r(shí)試圖尋路到接近的地點(diǎn),這通常會(huì)導(dǎo)致路徑交疊。以為一個(gè)或者多個(gè)單位都試圖走相同或者近似的路徑到達(dá)目的地。對(duì)其他單位已經(jīng)“認(rèn)領(lǐng)”了的節(jié)點(diǎn)增加一些懲罰會(huì)有助于你在一定程度上分離路徑,降低碰撞的可能性。然而,如果有必要,不要把那些節(jié)點(diǎn)看成不可通過(guò)的,因?yàn)槟闳匀幌M鄠(gè)單位能夠一字縱隊(duì)通過(guò)擁擠的出口。同時(shí),你只能懲罰那些臨近單位的路徑,而不是所有路徑,否則你就會(huì)得到奇怪的躲避行為例如單位躲避路徑上其他已經(jīng)不在那里的單位。 還有,你應(yīng)該只懲罰路徑當(dāng)前節(jié)點(diǎn)和隨后的節(jié)點(diǎn),而不應(yīng)處理已經(jīng)走過(guò)并甩在身后的節(jié)點(diǎn)。

3. 處理未知區(qū)域:你是否玩過(guò)這樣的PC游戲,電腦總是知道哪條路是正確的,即使它還沒(méi)有偵察過(guò)地圖?對(duì)于游戲,尋路太好會(huì)顯得不真實(shí)。幸運(yùn)的是,這是一格可以輕易解決的問(wèn)題。

答案就是為每個(gè)不同的玩家和電腦(每個(gè)玩家,而不是每個(gè)單位--那樣的話會(huì)耗費(fèi)大量的內(nèi)存)創(chuàng)建一個(gè)獨(dú)立的“knownWalkability”數(shù)組,每個(gè)數(shù)組包含玩家已經(jīng)探索過(guò)的區(qū)域,以及被當(dāng)作可通過(guò)區(qū)域的其他區(qū)域,直到被證實(shí)。用這種方法,單位會(huì)在路的死端徘徊并且導(dǎo)致錯(cuò)誤的選擇直到他們?cè)谥車(chē)业铰。一旦地圖被探索了,尋路就像往常那樣進(jìn)行。

4. 平滑路徑:盡管A*提供了最短,最低代價(jià)的路徑,它無(wú)法自動(dòng)提供看起來(lái)平滑的路徑?匆幌挛覀兊睦幼罱K形成的路徑(在圖7)。最初的一步是起始格的右下方,如果這一步是直接往下的話,路徑不是會(huì)更平滑一些嗎?

有幾種方法來(lái)解決這個(gè)問(wèn)題。當(dāng)計(jì)算路徑的時(shí)候可以對(duì)改變方向的格子施加不利影響,對(duì)G值增加額外的數(shù)值。也可以換種方法,你可以在路徑計(jì)算完之后沿著它跑一遍,找那些用相鄰格替換會(huì)讓路徑看起來(lái)更平滑的地方。想知道完整的結(jié)果,查看Toward More Realistic Pathfinding,一篇(免費(fèi),但是需要注冊(cè))Marco Pinter發(fā)表在Gamasutra.com的文章

5. 非方形搜索區(qū)域:在我們的例子里,我們使用簡(jiǎn)單的2D方形圖。你可以不使用這種方式。你可以使用不規(guī)則形狀的區(qū)域。想想冒險(xiǎn)棋的游戲,和游戲中那些國(guó)家。你可以設(shè)計(jì)一個(gè)像那樣的尋路關(guān)卡。為此,你可能需要建立一個(gè)國(guó)家相鄰關(guān)系的表格,和從一個(gè)國(guó)家移動(dòng)到另一個(gè)的G值。你也需要估算H值的方法。其他的事情就和例子中完全一樣了。當(dāng)你需要向開(kāi)啟列表中添加新元素的時(shí)候,不需使用相鄰的格子,取而代之的是從表格中尋找相鄰的國(guó)家。

類(lèi)似的,你可以為一張確定的地形圖創(chuàng)建路徑點(diǎn)系統(tǒng),路徑點(diǎn)一般是路上,或者地牢通道的轉(zhuǎn)折點(diǎn)。作為游戲設(shè)計(jì)者,你可以預(yù)設(shè)這些路徑點(diǎn)。兩個(gè)路徑點(diǎn)被認(rèn)為是相鄰的如果他們之間的直線上沒(méi)有障礙的話。在冒險(xiǎn)棋的例子里,你可以保存這些相鄰信息在某個(gè)表格里,當(dāng)需要在開(kāi)啟列表中添加元素的時(shí)候使用它。然后你就可以記錄關(guān)聯(lián)的G值(可能使用兩點(diǎn)間的直線距離),H值(可以使用到目標(biāo)點(diǎn)的直線距離),其他都按原先的做就可以了。

Amit Patel 寫(xiě)了其他方法的摘要。另一個(gè)在非方形區(qū)域搜索RPG地圖的例子,查看我的文章Two-Tiered A* Pathfinding。(譯者注:譯文:  A*分層尋路)

6. 一些速度方面的提示:當(dāng)你開(kāi)發(fā)你自己的A*程序,或者改寫(xiě)我的,你會(huì)發(fā)現(xiàn)尋路占據(jù)了大量的CPU時(shí)間,尤其是在大地圖上有大量對(duì)象在尋路的時(shí)候。如果你閱讀過(guò)網(wǎng)上的其他材料,你會(huì)明白,即使是開(kāi)發(fā)了星際爭(zhēng)霸或帝國(guó)時(shí)代的專(zhuān)家,這也無(wú)可奈何。如果你覺(jué)得尋路太過(guò)緩慢,這里有一些建議也許有效:

    * 使用更小的地圖或者更少的尋路者。

    * 不要同時(shí)給多個(gè)對(duì)象尋路。取而代之的是把他們加入一個(gè)隊(duì)列,把尋路過(guò)程分散在幾個(gè)游戲周期中。如果你的游戲以40周期每秒的速度運(yùn)行,沒(méi)人能察覺(jué)。但是當(dāng)大量尋路者計(jì)算自己路徑的時(shí)候,他們會(huì)發(fā)覺(jué)游戲速度突然變慢。

    * 盡量使用更大的地圖網(wǎng)格。這降低了尋路中搜索的總網(wǎng)格數(shù)。如果你有志氣,你可以設(shè)計(jì)兩個(gè)或者更多尋路系統(tǒng)以便使用在不同場(chǎng)合,取決于路徑的長(zhǎng)度。這也正是專(zhuān)業(yè)人士的做法,用大的區(qū)域計(jì)算長(zhǎng)的路徑,然后在接近目標(biāo)的時(shí)候切換到使用小格子/區(qū)域的精細(xì)尋路。如果你對(duì)這個(gè)觀點(diǎn)感興趣,查閱我的文章Two-Tiered A* Pathfinding。(譯者注:譯文:A*分層尋路)

    * 使用路徑點(diǎn)系統(tǒng)計(jì)算長(zhǎng)路徑,或者預(yù)先計(jì)算好路徑并加入到游戲中。
   
    * 預(yù)處理你的地圖,表明地圖中哪些區(qū)域是不可到達(dá)的。我把這些區(qū)域稱(chēng)作“孤島”。事實(shí)上,他們可以是島嶼或其他被墻壁包圍等無(wú)法到達(dá)的任意區(qū)域。A*的下限是,當(dāng)你告訴它要尋找通往那些區(qū)域的路徑時(shí),它會(huì)搜索整個(gè)地圖,直到所有可到達(dá)的方格/節(jié)點(diǎn)都被通過(guò)開(kāi)啟列表和關(guān)閉列表的計(jì)算。這會(huì)浪費(fèi)大量的CPU時(shí)間?梢酝ㄟ^(guò)預(yù)先確定這些區(qū)域(比如通過(guò)flood-fill或類(lèi)似的方法)來(lái)避免這種情況的發(fā)生,用某些種類(lèi)的數(shù)組記錄這些信息,在開(kāi)始尋路前檢查它。
   
    * 在一個(gè)擁擠的類(lèi)似迷宮的場(chǎng)合,把不能連通的節(jié)點(diǎn)看作死端。這些區(qū)域可以在地圖編輯器中預(yù)先手動(dòng)指定,或者如果你有雄心壯志,開(kāi)發(fā)一個(gè)自動(dòng)識(shí)別這些區(qū)域的算法。給定死端的所有節(jié)點(diǎn)可以被賦予一個(gè)唯一的標(biāo)志數(shù)字。然后你就可以在尋路過(guò)程中安全的忽略所有死端,只有當(dāng)起點(diǎn)或者終點(diǎn)恰好在死端的某個(gè)節(jié)點(diǎn)的時(shí)候才需要考慮它們。

7. 維護(hù)開(kāi)啟列表:這是A*尋路算法最重要的組成部分。每次你訪問(wèn)開(kāi)啟列表,你都需要尋找F值最低的方格。有幾種不同的方法實(shí)現(xiàn)這一點(diǎn)。你可以把路徑元素隨意保存,當(dāng)需要尋找F值最低的元素的時(shí)候,遍歷開(kāi)啟列表。這很簡(jiǎn)單,但是太慢了,尤其是對(duì)長(zhǎng)路徑來(lái)說(shuō)。這可以通過(guò)維護(hù)一格排好序的列表來(lái)改善,每次尋找F值最低的方格只需要選取列表的首元素。當(dāng)我自己實(shí)現(xiàn)的時(shí)候,這種方法是我的首選。

在小地圖。這種方法工作的很好,但它并不是最快的解決方案。更苛求速度的A*程序員使用叫做二叉堆的方法,這也是我在代碼中使用的方法。憑我的經(jīng)驗(yàn),這種方法在大多數(shù)場(chǎng)合會(huì)快2~3倍,并且在長(zhǎng)路經(jīng)上速度呈幾何級(jí)數(shù)提升(10倍以上速度)。如果你想了解更多關(guān)于二叉堆的內(nèi)容,查閱我的文章,Using Binary Heaps in A* Pathfinding。(譯者注:譯文:在A*尋路中使用二叉堆)

另一個(gè)可能的瓶頸是你在多次尋路之間清除和保存你的數(shù)據(jù)結(jié)構(gòu)的方法。我個(gè)人更傾向把所有東西都存儲(chǔ)在數(shù)組里面。雖然節(jié)點(diǎn)可以以面向?qū)ο蟮娘L(fēng)格被動(dòng)態(tài)的產(chǎn)生,記錄和保存,我發(fā)現(xiàn)創(chuàng)建和刪除對(duì)象所增加的大量時(shí)間,以及多余的管理層次減慢的整個(gè)過(guò)程的速度。但是,如果你使用數(shù)組,你需要在調(diào)用之間清理數(shù)據(jù)。這中情形你想做的最后一件事就是在尋路調(diào)用之后花點(diǎn)時(shí)間把一切歸零,尤其是你的地圖很大的時(shí)候。

我通過(guò)使用一個(gè)叫做whichList(x,y)的二維數(shù)組避免這種開(kāi)銷(xiāo),數(shù)組的每個(gè)元素表明了節(jié)點(diǎn)在開(kāi)啟列表還是在關(guān)閉列表中。嘗試尋路之后,我沒(méi)有清零這個(gè)數(shù)組。取而代之的是,我在新的尋路中重置onClosedList和onOpenList的數(shù)值,每次尋路兩個(gè)都+5或者類(lèi)似其他數(shù)值。這種方法,算法可以安全的跳過(guò)前面尋路留下的臟數(shù)據(jù)。我還在數(shù)組中儲(chǔ)存了諸如F,G和H的值。這樣一來(lái),我只需簡(jiǎn)單的重寫(xiě)任何已經(jīng)存在的值而無(wú)需被清除數(shù)組的操作干擾。將數(shù)據(jù)存儲(chǔ)在多維數(shù)組中需要更多內(nèi)存,所以這里需要權(quán)衡利弊。最后,你應(yīng)該使用你最得心應(yīng)手的方法。

8. Dijkstra的算法:盡管A*被認(rèn)為是通常最好的尋路算法(看前面的“題外話”),還是有一種另外的算法有它的可取之處-Dijkstra算法。Dijkstra算法和A*本質(zhì)是相同的,只有一點(diǎn)不同,就是Dijkstra算法沒(méi)有啟發(fā)式(H值總是0)。由于沒(méi)有啟發(fā)式,它在各個(gè)方向上平均搜索。正如你所預(yù)料,由于Dijkstra算法在找到目標(biāo)前通常會(huì)探索更大的區(qū)域,所以一般會(huì)比A*更慢一些。

那么為什么要使用這種算法呢?因?yàn)橛袝r(shí)候我們并不知道目標(biāo)的位置。比如說(shuō)你有一個(gè)資源采集單位,需要獲取某種類(lèi)型的資源若干。它可能知道幾個(gè)資源區(qū)域,但是它想去最近的那個(gè)。這種情況,Dijkstra算法就比A*更適合,因?yàn)槲覀儾恢滥膫(gè)更近。用A*,我們唯一的選擇是依次對(duì)每個(gè)目標(biāo)許路并計(jì)算距離,然后選擇最近的路徑。我們尋找的目標(biāo)可能會(huì)有不計(jì)其數(shù)的位置,我們只想找其中最近的,而我們并不知道它在哪里,或者不知道哪個(gè)是最近的。

進(jìn)一步的閱讀

好,現(xiàn)在你對(duì)一些進(jìn)一步的觀點(diǎn)有了初步認(rèn)識(shí)。這時(shí),我建議你研究我的源代碼。包里面包含兩個(gè)版本,一個(gè)是用C++寫(xiě)的,另一個(gè)用Blitz Basic。順便說(shuō)一句,兩個(gè)版本都注釋詳盡,容易閱讀,這里是鏈接。

    * 例子代碼: A* Pathfinder (2D) Version 1.9

如果你既不用C++也不用Blitz Basic,在C++版本里有兩個(gè)小的可執(zhí)行文件。Blitz Basic可以在從Blitz Basic網(wǎng)站免費(fèi)下載的Blitz Basic 3D(不是Blitz Plus)演示版上運(yùn)行。Ben O'Neill提供一個(gè)聯(lián)機(jī)演示可以在這里找到。

你也該看看以下的網(wǎng)頁(yè)。讀了這篇教程后,他們應(yīng)該變得容易理解多了。

    * Amit的 A* 頁(yè)面:這是由Amit Patel制作,被廣泛引用的頁(yè)面,如果你沒(méi)有事先讀這篇文章,可能會(huì)有點(diǎn)難以理解。值得一看。尤其要看Amit關(guān)于這個(gè)問(wèn)題的自己的看法。
    * Smart Moves:智能尋路:Bryan Stout發(fā)表在Gamasutra.com的這篇文章需要注冊(cè)才能閱讀。注冊(cè)是免費(fèi)的而且比起這篇文章和網(wǎng)站的其他資源,是非常物有所值的。Bryan用Delphi寫(xiě)的程序幫助我學(xué)習(xí)A*,也是我的A*代碼的靈感之源。它還描述了A*的幾種變化。
    * 地形分析:這是一格高階,但是有趣的話題,Dave Pottinge撰寫(xiě),Ensemble Studios的專(zhuān)家。這家伙參與了帝國(guó)時(shí)代和君王時(shí)代的開(kāi)發(fā)。別指望看懂這里所有的東西,但是這是篇有趣的文章也許會(huì)讓你產(chǎn)生自己的想法。它包含一些對(duì)mip-mapping,influence mapping以及其他一些高級(jí)AI/尋路觀點(diǎn)。對(duì)"flood filling"的討論使我有了我自己的“死端”和“孤島”的代碼的靈感,這些包含在我Blitz版本的代碼中。

其他一些值得一看的網(wǎng)站:

    * aiGuru: Pathfinding
    * Game AI Resource: Pathfinding
    * GameDev.net: Pathfinding

我同樣高度推薦下面這幾本書(shū), 里面有很多關(guān)于尋路和其他AI話題的文章。 它們也附帶了實(shí)例代碼的CD。這些書(shū)我都買(mǎi)了。另外,如果你通過(guò)下面的鏈接購(gòu)買(mǎi)了它們,我會(huì)從Amazon得到幾個(gè)美分。:)


好了,這就是全部。如果你剛好寫(xiě)一個(gè)運(yùn)用這些觀點(diǎn)的程序,我想拜讀一下。你可以這樣聯(lián)系我:

現(xiàn)在,好運(yùn)!

譯者參考文獻(xiàn):
在A*尋路中使用二叉堆
A*分層尋路

出處:藍(lán)色理想
責(zé)任編輯:藍(lán)色月光

上一頁(yè) Chapter 3. A*尋路初探 下一頁(yè)

◎進(jìn)入論壇Flash專(zhuān)欄版塊參加討論

相關(guān)文章 更多相關(guān)鏈接
Flash Lite 2.0 新功能介紹
Flash項(xiàng)目文件管理方式
為Flash建搜索內(nèi)容索引
諾基亞 Flash 移動(dòng)應(yīng)用程序大賽
新浪/閃客帝國(guó) 圖片效果解析
作者文章
做個(gè)簡(jiǎn)單的flash-MP3播放器
一個(gè)AS畫(huà)線的代碼
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門(mén)搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁(yè)制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大福“敬•自然”設(shè)計(jì)大賽開(kāi)啟
國(guó)際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國(guó)國(guó)防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問(wèn)題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買(mǎi)真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語(yǔ)言的編碼規(guī)范
如何在illustrator中繪制臺(tái)歷
Ps簡(jiǎn)單繪制一個(gè)可愛(ài)的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡(jiǎn)單的作品展示頁(yè)面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開(kāi)發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁(yè) 首頁(yè) 前頁(yè) 后頁(yè) 尾頁(yè) 頁(yè)次:4/4頁(yè) 1個(gè)記錄/頁(yè) 轉(zhuǎn)到 頁(yè) 共4個(gè)記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來(lái)自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來(lái)自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請(qǐng)不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫(huà),設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請(qǐng)與我們聯(lián)系,我們將立即刪除修改。

您的評(píng)論
用戶名:  口令:
說(shuō)明:輸入正確的用戶名和密碼才能參與評(píng)論。如果您不是本站會(huì)員,你可以注冊(cè) 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請(qǐng)用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評(píng)分 1 2 3 4 5
注意:請(qǐng)不要在評(píng)論中含與內(nèi)容無(wú)關(guān)的廣告鏈接,違者封ID
請(qǐng)您注意:
·不良評(píng)論請(qǐng)用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評(píng)論管理人員有權(quán)保留或刪除其管轄評(píng)論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評(píng)論文檔 | 報(bào)告錯(cuò)誤  
專(zhuān)業(yè)書(shū)推薦 更多內(nèi)容
網(wǎng)站可用性測(cè)試及優(yōu)化指南
《寫(xiě)給大家看的色彩書(shū)1》
《跟我去香港》
眾妙之門(mén)—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開(kāi)發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開(kāi)發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2