專利名稱:一種尋路方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種尋路方法和裝置。
背景技術(shù):
將某一位置作為目標(biāo)位置,以某一物體為起始位置,找到該物體從起始位置接近上述物體所經(jīng)過的路徑的過程,即為尋路的過程。目前較為成熟的尋路算法有A*尋路算法、等Dijkstra (迪科斯徹)算法等。為了體現(xiàn)物體的真實性,物體是有體積的,而且物體與物體之間不可以相互疊加也不能相互穿越。因此,在一個空間內(nèi),物體在移動過程中存在阻擋的現(xiàn)象。在計算機技術(shù)領(lǐng)域的實際應(yīng)用中,會將目標(biāo)位置起始位置置于一個圖形內(nèi),并將圖形分為眾多格(一般分為小方格)實現(xiàn)計算的簡化;請參閱圖1所示,為一個二維物體移動的舉例,大方形區(qū)域被劃分為相等的眾多小方格,其中存在ABC三個可移動物體,以及填充為斜線方格的位置固定的物體。假若一 A物體所在位置為目標(biāo)位置,BC物體需要靠近,那么可以從圖1中看出,A物體是2*2大小的,B物體是1*1大小的,C物體是4*4大小的,若將B物體到A物體的直線作為路徑,那么存在被固定物體阻擋的問題。另外BC兩個物體在向A物體移動的過程中,可能會存在相互重疊的問題。基于物理和數(shù)學(xué)模型的研究,目前對于以上問題都給出了相應(yīng)的解決算法。由于計算機計算路徑存在周期性,一般以一個tick (一個時間周期的統(tǒng)稱)為周期進(jìn)行計算,這樣就存在如下問題,請參閱圖2A和圖2B,所示的物體B的運動示意圖,其中圖2A為TO時刻物體B的位置,圖2B為Tl時刻物體B的位置,箭頭方向是運動方向。要實現(xiàn)阻擋,先有物體的阻擋數(shù)據(jù),一般來說地圖中,每個格子的阻擋值是用半個char類型也就是4個bit來表示。在每tick的前后設(shè)置和清理物體當(dāng)前所在位置的地圖阻擋值。假定TO時刻和Tl時刻相差一個tick的時間。假設(shè)一個tick的時間內(nèi),物體B移動了一個地圖格子,那么它所占的地圖格子就會被設(shè)置上阻擋值。上述帶阻擋的移動方案是比較常見的處理方法,一般在數(shù)據(jù)處理量較小的場景下tick時間較短的應(yīng)用中會使用并且有較好的效果。但如果要應(yīng)用到數(shù)據(jù)處理量大的場景下,會出現(xiàn)因后臺程序tick的間隔過長而引起穿插的問題,即相互穿越。為了更清楚的說明tick的間隔過長導(dǎo)致引起穿插的問題,請參閱圖3,圖3中物體D和物體B相互穿越的示意圖,箭頭方向為運動方向。為了解決阻擋的問題,引入了插值檢測,插值檢測請參閱圖4A和4B,其中4A是沒有插值的情況,網(wǎng)格部分是靜止的障礙物,若tick時間較長,那么物體B將會穿過障礙物,這顯然是不合理的。圖4B顯示的是插值檢測的過程,在物體B移動的路徑上,多加了一個插值點的判斷,這樣就能判斷識別出物體B在路徑上和障礙物有碰撞了。也即是說,在每個插值的時刻判斷物體的位置并在該位置設(shè)置阻擋值。但是加入插值后,物體會在tick時間內(nèi)移動經(jīng)過的位置設(shè)置多個阻擋,這樣會導(dǎo)致物體在每tick間占用了和它真實體積差異極大的阻擋。在實際應(yīng)用中,若存在多個物體,那么會導(dǎo)致物體與物體之間間隔很大,請參閱圖5所示,假定一個tick時間內(nèi)設(shè)置包含TO T3四個插值時刻,那么TO時刻物體B會將其路徑上的4個格子都設(shè)置阻擋值,到Tl時刻,物體B已經(jīng)離開了第一個阻擋格子,但由于必須等I個Tick完成后才會恢復(fù)占領(lǐng)格子的阻擋值,所以當(dāng)物體D開始尋路移動的時候,物體D就只能等待或者繞路了。這樣會導(dǎo)致,物體與物體之間存在很大不合理的間隙,無法實現(xiàn)物體運動的真實模擬。
發(fā)明內(nèi)容
本發(fā)明實施例提供了一種尋路方法和裝置,實現(xiàn)物體運動的真實模擬。一種尋路方法,包括:以預(yù)定時間周期分別計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑;在所述第一物體和第二物體路徑中的各時刻設(shè)置插值點,并依各插值點的先后次序設(shè)置各插值點的阻擋值級別;若所述第一物體的路徑與第二物體的路徑存重合,并且第一物體在重合區(qū)域的阻擋值級別高于所述第二物體在重合區(qū)域的阻擋值級別,則重新計算所述第二物體在所述重合區(qū)域以及重合區(qū)域之后的路徑。一種尋路裝置,包括:初始計算單元,用于以預(yù)定時間周期分別計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑;設(shè)置單元,用于在所述初始計算單元計算的第一物體和第二物體路徑中的各時刻設(shè)置插值點,并依各插值點的先后次序設(shè)置各插值點的阻擋值級別;判斷單元,用于確定所述第一物體的路徑與第二物體的路徑存是否存在重合,并且第一物體在重合區(qū)域的阻擋值級別是否高于所述第二物體在重合區(qū)域的阻擋值級別;阻擋計算單元,用于若判斷單元確定所述第一物體的路徑與第二物體的路徑存重合,并且第一物體在重合區(qū)域的阻擋值級別高于所述第二物體在重合區(qū)域的阻擋值級別,則重新計算所述第二物體在所述重合區(qū)域以及重合區(qū)域之后的路徑。從以上技術(shù)方案可以看出,本發(fā)明實施例具有以下優(yōu)點:通過按照插值點的先后次序設(shè)置各插值點的阻擋值級別,然后確定路徑是否重合,這樣可以實現(xiàn)以更小的時間片來確定物體的真實位置,以及是否阻擋。這樣就不會造成物體移動稀疏的問題,從而實現(xiàn)實現(xiàn)物體運動的真實模擬。
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為現(xiàn)有技術(shù)中物體在小格中的示意圖;圖2A為現(xiàn)有技術(shù)中物體的運動舉例示意圖;圖2B為現(xiàn)有技術(shù)中物體的運動舉例示意圖3為現(xiàn)有技術(shù)中物體相互穿越的示意圖;圖4A為現(xiàn)有技術(shù)中沒有插值的物體的運動舉例示意圖;圖4B為現(xiàn)有技術(shù)中有插值物體的運動舉例示意圖;圖5為現(xiàn)有技術(shù)中加入插值后物體運動示意圖;圖6為本發(fā)明實施例方法流程示意圖;圖7為本發(fā)明實施例一個tick周期物體移動示意圖;圖8為本發(fā)明實施例方法流程示意圖;圖9為本發(fā)明實施例方法流程示意圖;圖10為本發(fā)明實施例邊沿尋路物體移動示意圖;。圖11為本發(fā)明實施例方向檢測示意圖;圖12為本發(fā)明實施例狹窄地形示意圖;圖13為本發(fā)明實施例大體積的物體嵌入了場景的阻擋示意圖;圖14為本發(fā)明實施例優(yōu)先級較高的物體被卡住示意圖;圖15為本發(fā)明實施例裝置結(jié)構(gòu)示意圖;圖16為本發(fā)明實施例裝置結(jié)構(gòu)示意圖。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實施例僅僅是本發(fā)明一部份實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。本發(fā)明實施例提供了一種尋路方法,本方法實施例的基本思路是在一個tick時間里,根據(jù)時刻的不同來細(xì)分插值點,并把插值點占領(lǐng)的阻擋值分級。同一 tick(例如1/60秒)內(nèi),由于有阻擋分級和規(guī)則的存在,就可以較好地處理間隙大的問題了,如圖6,包括:601:以預(yù)定時間周期分別計算第一物體和第二物體的在上述預(yù)定時間周期內(nèi)的路徑;以上計算第一物體和第二物體的在上述預(yù)定時間周期內(nèi)的路徑可以采用成熟的任意尋路算法,本發(fā)明實施例不予限定。上述“第一”和“第二”僅用于區(qū)分兩個物體,不應(yīng)理解為其它限定,另外,實際應(yīng)用中物體的數(shù)量是可以有很多的,計算路徑考慮阻擋的情況每兩個物體采用本發(fā)明實施例方案執(zhí)行,最終在宏觀上則可能出現(xiàn)一個物體阻擋了多個物體。物體的個數(shù)本發(fā)明實施例不予限定。進(jìn)一步地,由于A*尋路算法耗費資源較多,為了在保證移動模擬真實性的前提下,盡可能的減少A*尋路算法的使用,本發(fā)明實施例提供了優(yōu)選的實現(xiàn)方案,如下:計算第一物體和第二物體的在上述預(yù)定時間周期內(nèi)的路徑的計算方式包括:首先使用直線尋路算法,若直線尋路失敗或者第一物體或第二物體到目標(biāo)位置的距離超過預(yù)定值,則使用腳印尋路算法,若腳印尋路失敗,則使用邊沿尋路算法,若邊沿尋路算法失敗,則進(jìn)行包圍檢測和方向檢測,若包圍檢測和方向檢測確定形成包圍或在預(yù)定方向上距離大于失敗值,則使用A*尋路算法,否則執(zhí)行邊沿包圍尋路。后續(xù)實施例將就上述路徑的計算方式進(jìn)行更詳細(xì)的舉例說明。
進(jìn)一步地,本發(fā)明實施例還提供了目標(biāo)被包圍以后路徑計算方式,具體可以如下:若計算第一物體和第二物體的在上述預(yù)定時間周期內(nèi)的路徑過程中失敗,還包括:選擇算第一物體或第二物體的在上述預(yù)定時間周期內(nèi)A*尋路算法計算路徑過程中,尋路失敗的路徑中最短路徑作為第一物體或第二物體的在上述預(yù)定時間周期內(nèi)的路徑。進(jìn)一步地,本發(fā)明實施例還提供了物體被靜態(tài)物體阻擋以后路徑計算方式,具體可以如下:若計算第一物體和第二物體的在上述預(yù)定時間周期內(nèi)的路徑過程中失敗,還包括:確定上述第一物體和第二物體是否存在與靜態(tài)阻擋重合,若存在,則將上述存在重合的第一物體和\或第二物體的體積設(shè)置為最小可計算體積。進(jìn)一步地,本發(fā)明實施例還提供了多個物體存在的情況下,更具優(yōu)先級的物體被阻擋的情況下路徑計算方式,具體可以如下:若計算第一物體和第二物體的在上述預(yù)定時間周期內(nèi)的路徑過程中失敗,還包括:確定第一物體和第二物體的優(yōu)先級,若存在優(yōu)先級較高的物體被優(yōu)先級較低的物體阻擋,則忽略低優(yōu)先級物體在各插值點設(shè)置阻擋值。進(jìn)一步地,本發(fā)明實施例還提供了讓更具優(yōu)先級的物體移動體現(xiàn)更多智能的方案,具體可以如下:上述方法,還包括:確定第一物體和第二物體的優(yōu)先級,并提高優(yōu)先級較高的物體的計算路徑的優(yōu)先級。該方案應(yīng)用于在線網(wǎng)絡(luò)游戲中,例如:在一些很有策略性的戰(zhàn)斗場景,如精英BOSS戰(zhàn)等,就要加大怪物的搜素路徑深度,提高該怪物的tick優(yōu)先級,以讓怪物表現(xiàn)得更有戰(zhàn)斗技巧。602:在上述第一物體和第二物體路徑中的各時刻設(shè)置插值點,并依各插值點的先后次序設(shè)置各插值點的阻擋值級別;可選地,上述依各插值點的先后次序設(shè)置各插值點的阻擋值級別;上述第一物體在重合區(qū)域的阻擋值級別高于上述第二物體在重合區(qū)域的阻擋值級別包括:按各插值點的先后次序依次大到小編號;上述第一物體在重合區(qū)域的編號大于上述第二物體在重合區(qū)域的編號;或者,按各插值點的先后次序依次小到大編號;上述第一物體在重合區(qū)域的編號小于上述第二物體在重合區(qū)域的編號。603:若上述第一物體的路徑與第二物體的路徑存重合,并且第一物體在重合區(qū)域的阻擋值級別高于上述第二物體在重合區(qū)域的阻擋值級別,則重新計算上述第二物體在上述重合區(qū)域以及重合區(qū)域之后的路徑。可以理解的是若上述第一物體的路徑與第二物體的路徑存重合,并且第一物體在重合區(qū)域的阻擋值級別高于上述第二物體在重合區(qū)域的阻擋值級別,那么就可以確定第二物體被第一物體在上述重合區(qū)域阻擋,上述重合區(qū)域也可以稱為阻擋區(qū)域。后續(xù)重新計算第二物體的路徑的時候,實際上即為將上述重合區(qū)域作為阻擋區(qū)域以后,重新計算路徑的過程,計算分算法可以采用目前已經(jīng)成熟的尋路算法。以上實施例中,插值分級阻擋的思路,是將一個tick時間分割成各個小時間片來考慮。請參閱圖7,作為一個舉例一個tick周期內(nèi)分為四級阻擋,分別對應(yīng)TO T3,為方便起見,直接用T的標(biāo)號來標(biāo)識其阻擋級別,那么請參閱圖5,那么在同一個tick周期里,B物體后的D物體也要往前走。判斷規(guī)則開始:由于D物體要把A格子占領(lǐng)為I級阻擋,判斷的時候發(fā)現(xiàn)A格子里已經(jīng)有O級阻擋,1>0,所以A格子能成功被D物體設(shè)置成I級阻擋值。在物體移動的表現(xiàn)上,就是D物體會緊貼著B物體移動。這樣就不會造成物體移動稀疏的問題,從而實現(xiàn)實現(xiàn)物體運動的真實模擬。以在線網(wǎng)絡(luò)游戲為例,假定B和D是兩個怪物,那么在同一個tick周期里,B怪物身后的D怪物也要往前走。判斷規(guī)則開始后,D怪物要把A格子占領(lǐng)為I級阻擋,判斷的時候發(fā)現(xiàn)A格子里已經(jīng)有O級阻擋,1>0,所以A格子能成功被D怪物設(shè)置成I級阻擋值。在戰(zhàn)斗的追擊表現(xiàn)上,就是D怪物會緊貼著B怪物前進(jìn)。這樣就不會造成怪物移動稀疏的問題。以下實施例將就路徑的計算方式進(jìn)行更詳細(xì)的舉例說明。在存在阻擋的情況下,物體如何有效尋路的問題。目前的各種尋路算法中,尋路模擬表現(xiàn)較好的是A*尋路算法,但是A*尋路算法極耗設(shè)備資源,下面將給出在平衡尋路模擬真實性表現(xiàn)效果的前提下,讓尋路更有效率,尋路模擬真實性表現(xiàn)效果更好。請參閱圖8,具體的過程包括:801:使用直線尋路算法計算路徑,若直線尋路失敗或者第一物體或第二物體到目標(biāo)位置的距離超過預(yù)定值,則進(jìn)入802 ;802:使用腳印尋路算法計算路徑,若腳印尋路失敗,則進(jìn)入803 ;803:使用邊沿尋路算法計算路徑,若邊沿尋路算法失敗,則進(jìn)入804 ;804:進(jìn)行包圍檢測和方向檢測,若包圍檢測和方向檢測確定形成包圍或在預(yù)定方向上距離大于失敗值,則進(jìn)入805 ;否則執(zhí)行邊沿包圍尋路;805:使用A*尋路算法計算路徑。上圖所示的基礎(chǔ)策略里,主要原則是減少對A*尋路算法的依賴和調(diào)用次數(shù),可以在保持尋路模擬真實性表現(xiàn)效果的基礎(chǔ)上盡量少用A*尋路算法。以上實施例的算法選擇的主要思路是:遠(yuǎn)距離尋路使用腳印尋路,近距離使用邊沿尋路。如果均失敗,則進(jìn)行包圍檢測和方向檢測等初步判斷原則來決定是否真的使用A*尋路算法,并且也可以盡量規(guī)避A*尋路算法失敗的情況(A*失敗是最耗性能的,會用試盡遍歷深度后才會失敗結(jié)束)。合理地設(shè)置A*的搜索深度,并限制服務(wù)器(server)每tick間對A*的調(diào)用次數(shù),這樣整個尋路的性能就可以控制在能接受的范圍內(nèi),達(dá)到較好的運行速度。下面會對邊沿尋路,包圍檢測,方向檢測等進(jìn)行細(xì)節(jié)的介紹。一、邊沿尋路邊沿尋路的復(fù)雜度也是線性的,在需要計算路徑的物體多的情況下效果更好。由于阻擋形狀是不規(guī)則的,有可能會出現(xiàn)越繞越遠(yuǎn)的情況,這里可以加一個偏移值的控制,控制繞的方向要基本和目標(biāo)點方向一致。該算法可以采用已成熟的偏移值的控制算法。以在線網(wǎng)絡(luò)游戲為例,邊沿尋路完成后怪物或者玩家會貼著阻擋周圍移動,然后再向目標(biāo)位置移動。邊沿尋路的流程,請參閱圖9所示,包括:901:連通判斷并找出貼邊格;902:貼著阻擋區(qū)域,選擇順時針或者逆時針方向?qū)ふ铱崭?;請參閱圖10,其中箭頭方向為路徑的兩種方向,其中B為移動物體,A物體的位置為目標(biāo)位置。903:確定新的空格是否與阻擋區(qū)域的觸點有阻擋;如果是確定該空格為計算得到的路徑上的格子,否則進(jìn)入902;繼續(xù)執(zhí)行903,直到物體與目標(biāo)位置的連線連通。在同屏物體數(shù)量達(dá)到一定程度的時候,使用包圍檢測和方向檢測的邏輯來規(guī)避調(diào)用A*也失敗的情況。以在線網(wǎng)絡(luò)游戲為例,在同屏怪物數(shù)量達(dá)到一定程度的時候,使用包圍過濾和方向過濾的邏輯來規(guī)避調(diào)用A*也失敗的情況。二、包圍檢測以待計算路徑的物體當(dāng)前位置格為起點,使用圖形學(xué)里填充封閉圖形的算法邏輯,遞歸當(dāng)前位置所在格附近的格子,如果存在有設(shè)定個數(shù)的格子是相互可連接的狀態(tài),則認(rèn)為沒有封閉,否則認(rèn)為待計算路徑的物體被封閉了。如果是封閉的,那么可以認(rèn)為計算路徑的物體就是被圍死。如果物體被圍死,那么就可以放棄使用A*尋路算法。上述設(shè)定個數(shù)的格子優(yōu)選使用10個格子。本實施例中,包圍檢測方案在網(wǎng)絡(luò)游戲中,即為:在怪物被圍死,或者玩家被圍死的情況下放棄使用A*尋路算法。三、方向檢測以四方向檢測為例,請參閱圖11,以目標(biāo)位置為中心,將目標(biāo)位置周圍的空間分成4分格,中線十字分割的四個區(qū)域,依次可以標(biāo)號為第一分格 第四分格。A物體第一次尋路調(diào)用A*尋路算法計算路徑,如果失敗,就把A物體和目標(biāo)位置的距離SI,設(shè)成是在“第三分格”的最短A*尋路算法失敗距離。如果同一個tick里B物體要對目標(biāo)位置尋路,那會先計算和目標(biāo)位置的距離S2,并找到當(dāng)前分格的最短失敗距離(SPSI),如果大于這個最短失敗距離,就會放棄使用A*尋路算法。如果要判斷更準(zhǔn)確的話,可以考慮把4分格細(xì)分為8分格。具體分格數(shù)本發(fā)明實施例不予限定。另外,本發(fā)明實施例還提供了尋路算法可能存在的一些故障的解決方案,如下:一、狹窄地形物體相互之間的阻擋請參閱圖12,是橋等狹窄地形的場景,A物體和B物體在狹窄地形內(nèi),C物體在狹窄地形外。這個時候若A物體位置為目標(biāo)位置,那么C物體無法找到到達(dá)目標(biāo)位置的路徑的,因為有B物體的阻擋。本方案提供了如何讓C物體的表現(xiàn)是自然,考慮A*尋路算法會遍歷附近的格子并給每個格子到目標(biāo)的路徑估值。那么在A*尋路算法失敗的過程中已經(jīng)尋到逼近目標(biāo)位置的最短路徑了(如上圖的箭頭所示路徑),只是沒有記錄下來??梢詫*尋路算法進(jìn)行略微修改,具體如下:在A*尋路算法失敗的時候記錄搜索過程中最短的估值的路徑(雖然不是成功的路徑),并返回該路徑。這樣在尋路失敗的時候,C物體也可以獲得這個最短路徑向目標(biāo)位置移動,逼近物體A。以在線網(wǎng)絡(luò)游戲為例,A怪物和B怪物在狹窄地形內(nèi),C怪物在狹窄地形外。這個時候若A怪物位置為目標(biāo)位置,那么C怪物無法找到到達(dá)目標(biāo)位置的路徑的,因為有B怪物的阻擋。本方案提供了如何讓C怪物的表現(xiàn)是自然,考慮A*尋路算法會遍歷附近的格子并給每個格子到目標(biāo)的路徑估值。那么在A*尋路算法失敗的過程中已經(jīng)尋到逼近目標(biāo)位置的最短路徑了(如上圖的箭頭所示路徑),只是沒有記錄下來??梢詫*尋路算法進(jìn)行略微修改,具體如下:在A*尋路算法失敗的時候記錄搜索過程中最短的估值的路徑(雖然不是成功的路徑),并返回該路徑。這樣在尋路失敗的時候,C怪物也可以獲得這個最短路徑向目標(biāo)位置移動,逼近A怪物。二、大體積的物體嵌入了場景的阻擋里請參閱圖13,黑色網(wǎng)格部分的阻擋是靜態(tài)的地形阻擋,物體C因為自身面積很大,被阻擋卡住了。要實現(xiàn)物體阻擋的方案,就一定要考慮物體部分被卡住,如何離開的問題。找解決方案的時候可以考慮的方案很多,如先判斷物體是否卡住,再判斷它是否有正在從阻擋里出來的趨勢,(要判斷這個趨勢就要考慮例如它占據(jù)的空間覆蓋了多少個阻擋格子,下一個路徑點是否比前一個位置點覆蓋的阻擋格子有減少等),但該方案計算復(fù)雜度較高。優(yōu)選地,如果物體自身占據(jù)的空間有一個格子和靜態(tài)地形阻擋重合的話,就將這個物體當(dāng)作1*1的體積來進(jìn)行尋路計算,直至它完全脫離困境(自身占據(jù)的空間沒有格子和靜態(tài)地形阻擋重合)。以在線網(wǎng)絡(luò)游戲為例,請參閱圖13所示,則是大體積的怪物被地形卡住的情形。黑色網(wǎng)格部分的阻擋是靜態(tài)的地形阻擋,C怪物(例如BOSS怪)因為自身面積很大,被阻擋卡住了。要實現(xiàn)怪物阻擋的方案,就一定要考慮怪物部分被卡住,如何離開的問題。找解決方案的時候可以考慮的方案很多,如先判斷BOSS怪是否卡住,再判斷它是否有正在從阻擋里出來的趨勢,(要判斷這個趨勢就要考慮例如它占據(jù)的空間覆蓋了多少個阻擋格子,下一個路徑點是否比前一個位置點覆蓋的阻擋格子有減少等),但該方案計算復(fù)雜度較高。優(yōu)選地,如果C怪物自身占據(jù)的空間有一個格子和靜態(tài)地形阻擋重合的話,就將這個怪物當(dāng)作1*1的體積來進(jìn)行尋路計算,直至它完全脫離困境(自身占據(jù)的空間沒有格子和靜態(tài)地形阻擋重合)。三、優(yōu)先級較高的物體被卡住了如圖14所示,優(yōu)先級較高的物體A被優(yōu)先級較低的物體BCDE卡住了 ;解決思路:復(fù)雜的想法是給物體加上優(yōu)先級,低級的要讓路給高級的。但這個實現(xiàn)的復(fù)雜度很高,而且怎樣讓優(yōu)先級較高的物體通知優(yōu)先級較低的物體讓路也存在問題,這需要使用群體協(xié)調(diào)算法復(fù)雜度較高。本發(fā)明實施例提供了較為簡便的解決方案:優(yōu)先級較高的物體A有阻擋,優(yōu)先級較低的物體移動的時候要考慮優(yōu)先級較高的物體A的阻擋,但優(yōu)先級較高的物體A移動的時候無視其他物體的阻擋,這樣優(yōu)先級較高的物體A就能穿越優(yōu)先級較低的物體。由于優(yōu)先級較高的物體A —般體形都比較大,從優(yōu)先級較低的物體上穿越的時候從視覺效果上類似于跨過,模擬的視覺表現(xiàn)上也不會太糟糕。以在線網(wǎng)絡(luò)游戲為例,如圖14所示,優(yōu)先級較高的怪物A (例如BOSS怪物)被優(yōu)先級較低的怪物BCDE (例如小怪)卡住了 ;小怪一直射箭攻擊玩家,玩家也在射箭攻擊boss,但boss是近戰(zhàn)類型的,尋路又被前面的小怪擋住,跑不出來了,一直被挨打。解決思路:復(fù)雜的想法是給怪物加上優(yōu)先級,低級的要讓路給高級的。但這個實現(xiàn)的復(fù)雜度很高,而且怎樣讓BOSS通知小怪讓路也存在問題,這需要使用群體協(xié)調(diào)算法復(fù)雜度較高。本發(fā)明實施例提供了較為簡便的解決方案:優(yōu)先級較高的BOSS有阻擋,優(yōu)先級較低的小怪移動的時候要考慮BOSS阻擋,但BOSS移動的時候無視其他小怪的阻擋,這樣BOSS就能穿越小怪。由于BOSS —般體形都比較大,從小怪身上穿越的時候從視覺效果上類似于跨過,模擬的視覺表現(xiàn)上也不會太糟糕。本發(fā)明實施例還提供了一種尋路裝置,如圖15所示,包括:初始計算單元1501,用于以預(yù)定時間周期分別計算第一物體和第二物體的在上述預(yù)定時間周期內(nèi)的路徑;設(shè)置單元1502,用于在上述初始計算單元1501計算的第一物體和第二物體路徑中的各時刻設(shè)置插值點,并依各插值點的先后次序設(shè)置各插值點的阻擋值級別;判斷單元1503,用于確定上述第一物體的路徑與第二物體的路徑存是否存在重合,并且第一物體在重合區(qū)域的阻擋值級別是否高于上述第二物體在重合區(qū)域的阻擋值級別;阻擋計算單元1504,用于若判斷單元1503確定上述第一物體的路徑與第二物體的路徑存重合,并且第一物體在重合區(qū)域的阻擋值級別高于上述第二物體在重合區(qū)域的阻擋值級別,則重新計算上述第二物體在上述重合區(qū)域以及重合區(qū)域之后的路徑??梢岳斫獾氖侨羯鲜龅谝晃矬w的路徑與第二物體的路徑存重合,并且第一物體在重合區(qū)域的阻擋值級別高于上述第二物體在重合區(qū)域的阻擋值級別,那么就可以確定第二物體被第一物體在上述重合區(qū)域阻擋,上述重合區(qū)域也可以稱為阻擋區(qū)域。后續(xù)重新計算第二物體的路徑的時候,實際上即為將上述重合區(qū)域作為阻擋區(qū)域以后,重新計算路徑的過程,計算分算法可以采用目前已經(jīng)成熟的尋路算法。以上實施例中,插值分級阻擋的思路,是將一個tick時間分割成各個小時間片來考慮。請參閱圖7,作為一個舉例一個tick周期內(nèi)分為四級阻擋,分別對應(yīng)TO T3,為方便起見,直接用T的標(biāo)號來標(biāo)識其阻擋級別,那么請參閱圖5,那么在同一個tick周期里,B物體后的D物體也要往前走。判斷規(guī)則開始:由于D物體要把A格子占領(lǐng)為I級阻擋,判斷的時候發(fā)現(xiàn)A格子里已經(jīng)有0級阻擋,1>0,所以A格子能成功被D物體設(shè)置成I級阻擋值。在物體移動的表現(xiàn)上,就是D物體會緊貼著B物體移動。這樣就不會造成物體移動稀疏的問題,從而實現(xiàn)實現(xiàn)物體運動的真實模擬。以在線網(wǎng)絡(luò)游戲為例,假定B和D是兩個怪物,那么在同一個tick周期里,B怪物身后的D怪物也要往前走。判斷規(guī)則開始后,D怪物要把A格子占領(lǐng)為I級阻擋,判斷的時候發(fā)現(xiàn)A格子里已經(jīng)有0級阻擋,1>0,所以A格子能成功被D怪物設(shè)置成I級阻擋值。在戰(zhàn)斗的追擊表現(xiàn)上,就是D怪物會緊貼著B怪物前進(jìn)。這樣就不會造成怪物移動稀疏的問題??蛇x地,上述設(shè)置單元1502,具體用于按各插值點的先后次序依次大到小編號;上述判斷單元1503,具體用于判斷上述第一物體在重合區(qū)域的編號是否大于上述第二物體在重合區(qū)域的編號;或者,上述設(shè)置單元1502,具體用于按各插值點的先后次序依次小到大編號;上述判斷單元1503,具體用于上述第一物體在重合區(qū)域的編號小于上述第二物體在重合區(qū)域的編號??蛇x地,由于A*尋路算法耗費資源較多,為了在保證移動模擬真實性的前提下,盡可能的減少A*尋路算法的使用,本發(fā)明實施例提供了優(yōu)選的實現(xiàn)方案,如下:上述初始計算單元1501,具體用于首先使用直線尋路算法,若直線尋路失敗或者第一物體或第二物體到目標(biāo)位置的距離超過預(yù)定值,則使用腳印尋路算法,若腳印尋路失敗,則使用邊沿尋路算法,若邊沿尋路算法失敗,則進(jìn)行包圍檢測和方向檢測,若包圍檢測和方向檢測確定形成包圍或在預(yù)定方向上距離大于失敗值,則使用A*尋路算法,否則執(zhí)行邊沿包圍尋路??蛇x地,本發(fā)明實施例還提供了目標(biāo)被包圍以后路徑計算方式,具體可以如下:上述初始計算單元1501,還用于若計算第一物體和第二物體的在上述預(yù)定時間周期內(nèi)的路徑過程中失敗,選擇算第一物體或第二物體的在上述預(yù)定時間周期內(nèi)A*尋路算法計算路徑過程中,尋路失敗的路徑中最短路徑作為第一物體或第二物體的在上述預(yù)定時間周期內(nèi)的路徑??蛇x地,本發(fā)明實施例還提供了物體被靜態(tài)物體阻擋以后路徑計算方式,具體可以如下:上述初始計算單元1501,還用于若計算第一物體和第二物體的在上述預(yù)定時間周期內(nèi)的路徑過程中失敗,確定上述第一物體和第二物體是否存在與靜態(tài)阻擋重合,若存在,則將上述存在重合的第一物體和\或第二物體的體積設(shè)置為最小可計算體積??蛇x地,本發(fā)明實施例還提供了多個物體存在的情況下,更具優(yōu)先級的物體被阻擋的情況下路徑計算方式,具體可以如下:上述初始計算單元1501,還用于若計算第一物體和第二物體的在上述預(yù)定時間周期內(nèi)的路徑過程中失敗,確定第一物體和第二物體的優(yōu)先級,若存在優(yōu)先級較高的物體被優(yōu)先級較低的物體阻擋,則忽略低優(yōu)先級物體在各插值點設(shè)置阻擋值??蛇x地,本發(fā)明實施例還提供了讓更具優(yōu)先級的物體移動體現(xiàn)更多智能的方案,具體可以如下:上述初始計算單元1501,還用于確定第一物體和第二物體的優(yōu)先級,并提高優(yōu)先級較高的物體的計算路徑的優(yōu)先級。本發(fā)明實施例還提供了另一種尋路裝置,如圖16所示,為了便于說明,僅示出了與本發(fā)明實施例相關(guān)的部分,具體技術(shù)細(xì)節(jié)未揭示的,請參照本發(fā)明實施例方法部分。該終端可以為包括手機、平板電腦、PDA (Personal Digital Assistant,個人數(shù)字助理)、POS(Point of Sales,銷售終端)、車載電腦等任意終端設(shè)備,還可以是服務(wù)器等設(shè)備,以終端為手機為例:圖16示出的是與本發(fā)明實施例提供的終端相關(guān)的手機的部分結(jié)構(gòu)的框圖。參考圖16,手機包括:射頻(Radio Frequency,RF)電路1610、存儲器1620、輸入單元1630、顯示單元1640、傳感器1650、音頻電路1660、無線保真(wireless fidelity, WiFi)模塊1670、處理器1680、以及電源1690等部件。本領(lǐng)域技術(shù)人員可以理解,圖16中示出的手機結(jié)構(gòu)并不構(gòu)成對手機的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布直。下面結(jié)合圖16對手機的各個構(gòu)成部件進(jìn)行具體的介紹:RF電路1610可用于收發(fā)信息或通話過程中,信號的接收和發(fā)送,特別地,將基站的下行信息接收后,給處理器1680處理;另外,將設(shè)計上行的數(shù)據(jù)發(fā)送給基站。通常,RF電路包括但不限于天線、至少一個放大器、收發(fā)信機、耦合器、低噪聲放大器(Low NoiseAmplifier, LNA)、雙工器等。此外,RF電路160還可以通過無線通信與網(wǎng)絡(luò)和其他設(shè)備通信。上述無線通信可以使用任一通信標(biāo)準(zhǔn)或協(xié)議,包括但不限于全球移動通訊系統(tǒng)(Global System of Mobile communication, GSM)、通用分組無線服務(wù)(General PacketRadio Service, GPRS)、碼分多址(Code Division Multiple Access, CDMA)、寬帶碼分多址(Wideband Code Division Multiple Access, WCDMA)、長期演進(jìn)(Long Term Evolution,LTE)、電子郵件、短消息服務(wù)(Short Messaging Service, SMS)等。存儲器1620可用于存儲軟件程序以及模塊,處理器1680通過運行存儲在存儲器1620的軟件程序以及模塊,從而執(zhí)行手機的各種功能應(yīng)用以及數(shù)據(jù)處理。存儲器1620可主要包括存儲程序區(qū)和存儲數(shù)據(jù)區(qū),其中,存儲程序區(qū)可存儲操作系統(tǒng)、至少一個功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲數(shù)據(jù)區(qū)可存儲根據(jù)手機的使用所創(chuàng)建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話本等)等。此外,存儲器1620可以包括高速隨機存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他易失性固態(tài)存儲器件。輸入單元1630可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與手機1600的用戶設(shè)置以及功能控制有關(guān)的鍵信號輸入。具體地,輸入單元1630可包括觸控面板1631以及其他輸入設(shè)備1632。觸控面板1631,也稱為觸摸屏,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸控面板1631上或在觸控面板1631附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動相應(yīng)的連接裝置??蛇x的,觸控面板1631可包括觸摸檢測裝置和觸摸控制器兩個部分。其中,觸摸檢測裝置檢測用戶的觸摸方位,并檢測觸摸操作帶來的信號,將信號傳送給觸摸控制器;觸摸控制器從觸摸檢測裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點坐標(biāo),再送給處理器1680,并能接收處理器1680發(fā)來的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實現(xiàn)觸控面板1631。除了觸控面板1631,輸入單元1630還可以包括其他輸入設(shè)備1632。具體地,其他輸入設(shè)備1632可以包括但不限于物理鍵盤、功能鍵(比如音量控制按鍵、開關(guān)按鍵等)、軌跡球、鼠標(biāo)、操作桿等中的一種或多種。顯示單元1640可用于顯示由用戶輸入的信息或提供給用戶的信息以及手機的各種菜單。顯示單元1640可包括顯示面板1641,可選的,可以采用液晶顯示器(LiquidCrystal Display, LCD)、有機發(fā)光二極管(Organic Light-Emitting Diode, 0LED)等形式來配置顯示面板1641。進(jìn)一步的,觸控面板1631可覆蓋顯示面板1641,當(dāng)觸控面板1631檢測到在其上或附近的觸摸操作后,傳送給處理器1680以確定觸摸事件的類型,隨后處理器1680根據(jù)觸摸事件的類型在顯示面板1641上提供相應(yīng)的視覺輸出。雖然在圖16中,觸控面板1631與顯示面板1641是作為兩個獨立的部件來實現(xiàn)手機的輸入和輸入功能,但是在某些實施例中,可以將觸控面板1631與顯示面板1641集成而實現(xiàn)手機的輸入和輸出功倉泛。手機1600還可包括至少一種傳感器1650,比如光傳感器、運動傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線的明暗來調(diào)節(jié)顯示面板1641的亮度,接近傳感器可在手機移動到耳邊時,關(guān)閉顯示面板1641和/或背光。作為運動傳感器的一種,加速計傳感器可檢測各個方向上(一般為三軸)加速度的大小,靜止時可檢測出重力的大小及方向,可用于識別手機姿態(tài)的應(yīng)用匕如橫豎屏切換、相關(guān)游戲、磁力計姿態(tài)校準(zhǔn))、振動識別相關(guān)功能(比如計步器、敲擊)等;至于手機還可配置的陀螺儀、氣壓計、濕度計、溫度計、紅外線傳感器等其他傳感器,在此不再贅述。音頻電路1660、揚聲器1661,傳聲器1662可提供用戶與手機之間的音頻接口。音頻電路1660可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號,傳輸?shù)綋P聲器1661,由揚聲器1661轉(zhuǎn)換為聲音信號輸出;另一方面,傳聲器1662將收集的聲音信號轉(zhuǎn)換為電信號,由音頻電路1660接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器1680處理后,經(jīng)RF電路1610以發(fā)送給比如另一手機,或者將音頻數(shù)據(jù)輸出至存儲器1620以便進(jìn)一步處理。WiFi屬于短距離無線傳輸技術(shù),手機通過WiFi模塊1670可以幫助用戶收發(fā)電子郵件、瀏覽網(wǎng)頁和訪問流式媒體等,它為用戶提供了無線的寬帶互聯(lián)網(wǎng)訪問。雖然圖16示出了 WiFi模塊1670,但是可以理解的是,其并不屬于手機1600的必須構(gòu)成,完全可以根據(jù)需要在不改變發(fā)明的本質(zhì)的范圍內(nèi)而省略。處理器1680是手機的控制中心,利用各種接口和線路連接整個手機的各個部分,通過運行或執(zhí)行存儲在存儲器1620內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲在存儲器1620內(nèi)的數(shù)據(jù),執(zhí)行手機的各種功能和處理數(shù)據(jù),從而對手機進(jìn)行整體監(jiān)控。可選的,處理器1680可包括一個或多個處理單元;優(yōu)選的,處理器1680可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無線通信??梢岳斫獾氖?,上述調(diào)制解調(diào)處理器也可以不集成到處理器1680中。手機1600還包括給各個部件供電的電源1690(比如電池),優(yōu)選的,電源可以通過電源管理系統(tǒng)與處理器1680邏輯相連,從而通過電源管理系統(tǒng)實現(xiàn)管理充電、放電、以及功耗管理等功能。盡管未示出,手機1600還可以包括攝像頭、藍(lán)牙模塊等,在此不再贅述。在本發(fā)明實施例中,該終端所包括的處理器1680還具有以下功能:以預(yù)定時間周期分別計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑;在所述第一物體和第二物體路徑中的各時刻設(shè)置插值點,并依各插值點的先后次序設(shè)置各插值點的阻擋值級別;若所述第一物體的路徑與第二物體的路徑存重合,并且第一物體在重合區(qū)域的阻擋值級別高于所述第二物體在重合區(qū)域的阻擋值級別,則重新計算所述第二物體在所述重合區(qū)域以及重合區(qū)域之后的路徑。以上實施例中,插值分級阻擋的思路,是將一個tick時間分割成各個小時間片來考慮。請參閱圖7,作為一個舉例一個tick周期內(nèi)分為四級阻擋,分別對應(yīng)TO T3,為方便起見,直接用T的標(biāo)號來標(biāo)識其阻擋級別,那么請參閱圖5,那么在同一個tick周期里,B物體后的D物體也要往前走。判斷規(guī)則開始:由于D物體要把A格子占領(lǐng)為I級阻擋,判斷的時候發(fā)現(xiàn)A格子里已經(jīng)有0級阻擋,1>0,所以A格子能成功被D物體設(shè)置成I級阻擋值。在物體移動的表現(xiàn)上,就是D物體會緊貼著B物體移動。這樣就不會造成物體移動稀疏的問題,從而實現(xiàn)實現(xiàn)物體運動的真實模擬。以在線網(wǎng)絡(luò)游戲為例,假定B和D是兩個怪物,那么在同一個tick周期里,B怪物身后的D怪物也要往前走。判斷規(guī)則開始后,D怪物要把A格子占領(lǐng)為I級阻擋,判斷的時候發(fā)現(xiàn)A格子里已經(jīng)有0級阻擋,1>0,所以A格子能成功被D怪物設(shè)置成I級阻擋值。在戰(zhàn)斗的追擊表現(xiàn)上,就是D怪物會緊貼著B怪物前進(jìn)。這樣就不會造成怪物移動稀疏的問題??蛇x地,所述依各插值點的先后次序設(shè)置各插值點的阻擋值級別;所述第一物體在重合區(qū)域的阻擋值級別高于所述第二物體在重合區(qū)域的阻擋值級別包括:按各插值點的先后次序依次大到小編號;所述第一物體在重合區(qū)域的編號大于所述第二物體在重合區(qū)域的編號;或者,按各插值點的先后次序依次小到大編號;所述第一物體在重合區(qū)域的編號小于所述第二物體在重合區(qū)域的編號??蛇x地,計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑的計算方式包括:首先使用直線尋路算法,若直線尋路失敗或者第一物體或第二物體到目標(biāo)位置的距離超過預(yù)定值,則使用腳印尋路算法,若腳印尋路失敗,則使用邊沿尋路算法,若邊沿尋路算法失敗,則進(jìn)行包圍檢測和方向檢測,若包圍檢測和方向檢測確定形成包圍或在預(yù)定方向上距離大于失敗值,則使用A*尋路算法,否則執(zhí)行邊沿包圍尋路??蛇x地,若計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑過程中失敗,還包括:選擇算第一物體或第二物體的在所述預(yù)定時間周期內(nèi)A*尋路算法計算路徑過程中,尋路失敗的路徑中最短路徑作為第一物體或第二物體的在所述預(yù)定時間周期內(nèi)的路徑??蛇x地,若計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑過程中失敗,還包括:確定所述第一物體和第二物體是否存在與靜態(tài)阻擋重合,若存在,則將所述存在重合的第一物體和\或第二物體的體積設(shè)置為最小可計算體積??蛇x地,若計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑過程中失敗,還包括:確定第一物體和第二物體的優(yōu)先級,若存在優(yōu)先級較高的物體被優(yōu)先級較低的物體阻擋,則忽略低優(yōu)先級物體在各插值點設(shè)置阻擋值??蛇x地,所述方法,還包括:確定第一物體和第二物體的優(yōu)先級,并提高優(yōu)先級較高的物體的計算路徑的優(yōu)先級。值得注意的是,上述裝置實施例中,所包括的各個單元只是按照功能邏輯進(jìn)行劃分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應(yīng)的功能即可;另外,各功能單元的具體名稱也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護范圍。另外,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述各方法實施例中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,相應(yīng)的程序可以存儲于一種計算機可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。以上僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明實施例揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)該以權(quán)利要求的保護范圍為準(zhǔn)。
權(quán)利要求
1.一種尋路方法,其特征在于,包括: 以預(yù)定時間周期分別計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑; 在所述第一物體和第二物體路徑中的各時刻設(shè)置插值點,并依各插值點的先后次序設(shè)置各插值點的阻擋值級別; 若所述第一物體的路徑與第二物體的路徑存重合,并且第一物體在重合區(qū)域的阻擋值級別高于所述第二物體在重合區(qū)域的阻擋值級別,則重新計算所述第二物體在所述重合區(qū)域以及重合區(qū)域之后的路徑。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,所述依各插值點的先后次序設(shè)置各插值點的阻擋值級別;所述第一物體在重合區(qū)域的阻擋值級別高于所述第二物體在重合區(qū)域的阻擋值級別包括: 按各插值點的先后次序依次大到小編號;所述第一物體在重合區(qū)域的編號大于所述第二物體在重合區(qū)域的編號;或者, 按各插值點的先后次序依次小到大編號;所述第一物體在重合區(qū)域的編號小于所述第二物體在重合區(qū)域的編號。
3.根據(jù)權(quán)利要求1或2所述方法,其特征在于,計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑的計算方式包括: 首先使用直線尋路算法,若直線尋路失敗或者第一物體或第二物體到目標(biāo)位置的距離超過預(yù)定值,則使用腳印尋路算法,若腳印尋路失敗,則使用邊沿尋路算法,若邊沿尋路算法失敗,則進(jìn)行包圍檢測和方向檢測,若包圍檢測和方向檢測確定形成包圍或在預(yù)定方向上距離大于失敗值,則使用A*尋路算法,否則執(zhí)行邊沿包圍尋路。
4.根據(jù)權(quán)利要求1或2所 述方法,其特征在于,若計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑過程中失敗,還包括: 選擇算第一物體或第二物體的在所述預(yù)定時間周期內(nèi)A*尋路算法計算路徑過程中,尋路失敗的路徑中最短路徑作為第一物體或第二物體的在所述預(yù)定時間周期內(nèi)的路徑。
5.根據(jù)權(quán)利要求1或2所述方法,其特征在于,若計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑過程中失敗,還包括: 確定所述第一物體和第二物體是否存在與靜態(tài)阻擋重合,若存在,則將所述存在重合的第一物體和\或第二物體的體積設(shè)置為最小可計算體積。
6.根據(jù)權(quán)利要求1或2所述方法,其特征在于,若計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑過程中失敗,還包括: 確定第一物體和第二物體的優(yōu)先級,若存在優(yōu)先級較高的物體被優(yōu)先級較低的物體阻擋,則忽略低優(yōu)先級物體在各插值點設(shè)置阻擋值。
7.根據(jù)權(quán)利要求1或2所述方法,其特征在于,還包括: 確定第一物體和第二物體的優(yōu)先級,并提高優(yōu)先級較高的物體的計算路徑的優(yōu)先級。
8.一種尋路裝置,其特征在于,包括: 初始計算單元,用于以預(yù)定時間周期分別計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑; 設(shè)置單元,用于在所述初始計算單元計算的第一物體和第二物體路徑中的各時刻設(shè)置插值點,并依各插值點的先后次序設(shè)置各插值點的阻擋值級別;判斷單元,用于確定所述第一物體的路徑與第二物體的路徑存是否存在重合,并且第一物體在重合區(qū)域的阻擋值級別是否高于所述第二物體在重合區(qū)域的阻擋值級別; 阻擋計算單元,用于若判斷單元確定所述第一物體的路徑與第二物體的路徑存重合,并且第一物體在重合區(qū)域的阻擋值級別高于所述第二物體在重合區(qū)域的阻擋值級別,則重新計算所述第二物體在所述重合區(qū)域以及重合區(qū)域之后的路徑。
9.根據(jù)權(quán)利要求8所述裝置,其特征在于, 所述設(shè)置單元,具體用于按各插值點的先后次序依次大到小編號; 所述判斷單元,具體用于判斷所述第一物體在重合區(qū)域的編號是否大于所述第二物體在重合區(qū)域的編號;或者, 所述設(shè)置單元,具體用于按各插值點的先后次序依次小到大編號; 所述判斷單元,具體用于所述第一物體在重合區(qū)域的編號小于所述第二物體在重合區(qū)域的編號。
10.根據(jù)權(quán)利要求8或9所述裝置,其特征在于, 所述初始計算單元,具體用于首先使用直線尋路算法,若直線尋路失敗或者第一物體或第二物體到目標(biāo)位置的距離超過預(yù)定值,則使用腳印尋路算法,若腳印尋路失敗,則使用邊沿尋路算法,若邊沿尋路算法失敗,則進(jìn)行包圍檢測和方向檢測,若包圍檢測和方向檢測確定形成包圍或在預(yù)定方向上距離大于失敗值,則使用A*尋路算法,否則執(zhí)行邊沿包圍尋路。
11.根據(jù)權(quán)利 要求8或9所述裝置,其特征在于, 所述初始計算單元,還用于若計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑過程中失敗,選擇算第一物體或第二物體的在所述預(yù)定時間周期內(nèi)A*尋路算法計算路徑過程中,尋路失敗的路徑中最短路徑作為第一物體或第二物體的在所述預(yù)定時間周期內(nèi)的路徑。
12.根據(jù)權(quán)利要求8或9所述裝置,其特征在于, 所述初始計算單元,還用于若計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑過程中失敗,確定所述第一物體和第二物體是否存在與靜態(tài)阻擋重合,若存在,則將所述存在重合的第一物體和\或第二物體的體積設(shè)置為最小可計算體積。
13.根據(jù)權(quán)利要求8或9所述裝置,其特征在于, 所述初始計算單元,還用于若計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑過程中失敗,確定第一物體和第二物體的優(yōu)先級,若存在優(yōu)先級較高的物體被優(yōu)先級較低的物體阻擋,則忽略低優(yōu)先級物體在各插值點設(shè)置阻擋值。
14.根據(jù)權(quán)利要求8或9所述裝置,其特征在于, 所述初始計算單元,還用于確定第一物體和第二物體的優(yōu)先級,并提高優(yōu)先級較高的物體的計算路徑的優(yōu)先級。
全文摘要
本發(fā)明實施例公開了一種尋路方法和裝置,其中方法包括以預(yù)定時間周期分別計算第一物體和第二物體的在所述預(yù)定時間周期內(nèi)的路徑;在所述第一物體和第二物體路徑中的各時刻設(shè)置插值點,并依各插值點的先后次序設(shè)置各插值點的阻擋值級別;若所述第一物體的路徑與第二物體的路徑存重合,并且第一物體在重合區(qū)域的阻擋值級別高于所述第二物體在重合區(qū)域的阻擋值級別,則重新計算所述第二物體在所述重合區(qū)域以及重合區(qū)域之后的路徑。通過按照插值點的先后次序設(shè)置各插值點的阻擋值級別,然后確定路徑是否重合,這樣可以實現(xiàn)以更小的時間片來確定物體的真實位置,以及是否阻擋。這樣就不會造成物體移動稀疏的問題,從而實現(xiàn)實現(xiàn)物體運動的真實模擬。
文檔編號G06F19/00GK103207951SQ20131014068
公開日2013年7月17日 申請日期2013年4月22日 優(yōu)先權(quán)日2013年4月22日
發(fā)明者鄭潤宗, 郭俊 申請人:騰訊科技(深圳)有限公司