083]以起點為圓心、以起點到動態(tài)阻隔物之間的距離為半徑作圓;
[0084]判斷優(yōu)化后的路徑與圓是否有交點;
[0085]若優(yōu)化后的路徑與圓有交點,則采用柵格確定方式在起點及交點之間確定路徑,并根據(jù)確定結(jié)果判斷本次確定的路徑是否為正確的路徑。
[0086]作為一種可選的實施例,根據(jù)確定結(jié)果判斷本次確定的路徑是否為正確的路徑,包括:
[0087]若采用柵格確定方式在起點及交點之間不能確定一條路徑,則判斷本次確定的路徑為不正確的路徑;
[0088]若采用柵格確定方式在起點及交點之間能夠確定一條路徑,則判斷本次確定的路徑為正確的路徑。
[0089]作為一種可選的實施例,判斷確定的路徑為正確的路徑之后,還包括:
[0090]獲取采用柵格確定方式在起點到交點之間確定的路徑,將采用柵格確定方式在起點到交點之間確定的路徑與優(yōu)化得到的路徑中交點到終點之間的路徑進行拼接,得到一條支持動態(tài)阻擋的路徑。
[0091]本發(fā)明實施例提供的方法,通過獲取預(yù)先生成的矩形網(wǎng)絡(luò),并確定本次待確定路徑的起點及終點所屬的柵格之后,根據(jù)起點及終點所屬的柵格中存儲的矩形網(wǎng)格的鄰接信息確定起點在矩形網(wǎng)絡(luò)中對應(yīng)的矩形網(wǎng)格及終點在矩形網(wǎng)絡(luò)中對應(yīng)的矩形網(wǎng)格,進而根據(jù)起點對應(yīng)的矩形網(wǎng)格及終點對應(yīng)的矩形網(wǎng)格確定初始路徑。由于矩形網(wǎng)格的鄰接邊較多且矩形網(wǎng)格與柵格兼容,因而提高了確定路徑的速度及精度。
[0092]結(jié)合上述實施例,本發(fā)明實施例提供了一種確定路徑的方法,參見圖2,本發(fā)明實施例提供的方法流程包括:
[0093]201:獲取預(yù)先生成的矩形網(wǎng)絡(luò)。
[0094]目前開發(fā)的游戲類應(yīng)用大多為場景游戲類應(yīng)用,每個場景游戲類應(yīng)用均對應(yīng)一個實施環(huán)境,當用戶使用場景游戲類應(yīng)用時,需要在該場景游戲類應(yīng)用的實施環(huán)境中完成相應(yīng)的任務(wù)。然而場景類游戲類應(yīng)用的實施環(huán)境較為抽象,用戶在根據(jù)抽象的實施環(huán)境去完成具體任務(wù)的難度較大,用戶體驗效果不佳,因此,為了直觀地展現(xiàn)每個場景游戲類應(yīng)用的實施環(huán)境,以提升用戶的體驗效果,可用場景地圖來描述場景游戲類應(yīng)用的實施環(huán)境。其中,場景地圖為表征游戲類應(yīng)用實施環(huán)境的數(shù)據(jù)結(jié)構(gòu)。場景地圖由正方形的柵格組成,不同的正方形的柵格具有不同的屬性信息,通過每個正方形的柵格的屬性信息可以確定該柵格對應(yīng)的實施環(huán)境的不同地貌。其中,屬性信息包括但不限于柵格所表征的游戲類應(yīng)用對應(yīng)的地形描述數(shù)據(jù)等,本實施例不對屬性信息作具體的限定。例如,若正方形的柵格的屬性信息為河流的地形描述數(shù)據(jù),則可確定該柵格對應(yīng)的實施環(huán)境為河流;若正方形的柵格的屬性信息為草地的地形描述數(shù)據(jù),則可確定該柵格對應(yīng)的實施環(huán)境為草地。
[0095]另外,由于游戲類應(yīng)用的實施場景中包含的地形區(qū)域較為豐富,有用于表征實施環(huán)境為高山的地形區(qū)域,有用于表征實施環(huán)境為海洋的地形區(qū)域,也有用于表征實施環(huán)境為草地的地形區(qū)域等,而本實施例提供的方法所確定的路徑主要是為游戲類應(yīng)用中的執(zhí)行主體確定的,且游戲類應(yīng)用的執(zhí)行主體在游戲類應(yīng)用的實施環(huán)境中并不是所有的區(qū)域均可穿越,因此,為了便于后續(xù)確定路徑,在本實施例中將游戲類應(yīng)用的執(zhí)行主體能夠穿越的區(qū)域成為可行走區(qū)域,將游戲類應(yīng)用的執(zhí)行主體不能穿越的區(qū)域成為不可行走區(qū)域。
[0096]進一步地,由于速度是衡量游戲類應(yīng)用帶給用戶體驗效果的重要指標,而傳統(tǒng)的基于場景地圖中的柵格確定路徑的方法在確定路徑時,需要逐個柵格進行確定,當場景地圖中的柵格數(shù)量較大時,采用傳統(tǒng)的路徑確定方法確定路徑時速度較慢,用戶體驗效果不佳,因此,為了提升用戶的體驗效果,本實施例提供的方法在確定路徑時基于預(yù)先生成的矩形網(wǎng)絡(luò)進行確定。由于矩形網(wǎng)絡(luò)由第一預(yù)設(shè)數(shù)量個矩形網(wǎng)格鄰接構(gòu)成,且每個矩形網(wǎng)格又由多個正方形的柵格組成,因此,較單一根據(jù)正方形的柵格確定路徑的速度要快。其中,第一預(yù)設(shè)數(shù)量可以為10個、20個、60個等,本實施例不對矩形網(wǎng)絡(luò)中包括的矩形網(wǎng)格的數(shù)量作具體的限定。
[0097]進一步地,由于本實施例提供的方法在確定路徑時主要是基于預(yù)先生成的矩形網(wǎng)絡(luò),因此,在確定路徑之前,需要先獲取預(yù)先生成的矩形網(wǎng)絡(luò)。具體地,關(guān)于獲取預(yù)先生成的矩形網(wǎng)絡(luò)的方式,包括但不限于如下步驟:
[0098]第一步,獲取場景地圖,場景地圖由第二預(yù)設(shè)數(shù)量個正方形的柵格組成;
[0099]其中,第二預(yù)設(shè)數(shù)量可以為100個、200個、500個等,本實施例不對第二預(yù)設(shè)數(shù)量作具體的限定。
[0100]第二步,在場景地圖的所有柵格中隨機選取一個柵格,采用遞歸方式以選取的柵格為起點在場景地圖上進行擴張,得到一個以選取的柵格為起點且面積最大的矩形網(wǎng)格,將面積最大的矩形網(wǎng)格中包含的柵格作為處理過的柵格。
[0101]為了將場景地圖中的可行走區(qū)域最大化的呈現(xiàn)出來,本實施例提供的方法以上述第一步獲取到的場景地圖為基礎(chǔ),將在獲取到的場景地圖的所有柵格中隨機選取一個柵格,并采用遞歸方式以選取的柵格為起點在場景地圖上不斷進行擴張,直至得到一個以選取的柵格為起點且面積最大的矩形網(wǎng)格。其中,遞歸方式為將需要解決的問題轉(zhuǎn)化為規(guī)??s小了的同類問題的子問題,然后遞歸調(diào)用函數(shù)(或過程)來表示問題的解的一種方式。
[0102]需要說明的是,由于場景地圖由第二預(yù)設(shè)數(shù)量個正方形的柵格組成,且每個正方形的柵格具有不同的屬性信息以表示覆蓋的區(qū)域是否為可行走區(qū)域,而場景游戲類應(yīng)用需要用戶確定的路徑為跨越可行走區(qū)域的路徑,因此,在采用遞歸方式以選取的柵格為起點在場景地圖上進行擴張時,應(yīng)保證擴張到的區(qū)域為場景地圖中的可行走區(qū)域。當以選取的柵格為起點在場景地圖上進行擴張時,若待擴張的區(qū)域為可行走區(qū)域,則可以選取的柵格為起點在場景地圖上向該待擴張區(qū)域進行擴張;若待擴張的區(qū)域為不可行走區(qū)域,則本次擴張停止。
[0103]具體地,采用遞歸方式以選取的柵格為起點在場景地圖上進行擴張,得到一個以選取的柵格為起點且面積最大的矩形網(wǎng)格,包括但不限于如下方式:
[0104]I)、以選取的柵格為起點在場景地圖上進行擴張,得到滿足第一預(yù)設(shè)條件的第一矩形;
[0105]由于場景地圖中并不是所有的區(qū)域都是可行走區(qū)域,如場景地區(qū)中表征實施環(huán)境為湖泊的區(qū)域為不可行走區(qū)域,場景地圖中實施環(huán)境為草地的區(qū)域為可行走區(qū)域,而游戲類應(yīng)用為用戶設(shè)定的路徑尋找任務(wù)希望用戶尋找到的路徑穿越的區(qū)域為可行走區(qū)域,且本實施例中的矩形網(wǎng)格及由矩形網(wǎng)格組成的矩形網(wǎng)絡(luò)中所包含的區(qū)域應(yīng)為可行走區(qū)域,因此,在以選取的柵格為起點在場景地圖上進行擴張時,需要保證擴張得到的第一矩形滿足第一預(yù)設(shè)條件。其中,第一預(yù)設(shè)條件包括但不限于矩形的最大長寬比、擴張到的區(qū)域是否為可行走區(qū)域等,本實施例不對第一預(yù)設(shè)條件作具體的限定。關(guān)于以選取的柵格為起點在場景地圖上擴張的方式,包括但不限于如下方式:
[0106]首先,以選取的場景地圖為基礎(chǔ)建立直角坐標系;
[0107]其次,以選取的柵格為起點在場景地圖中向X軸、Y軸正方向進行整體擴張。
[0108]需要說明的是,為了便于后續(xù)步驟中根據(jù)本步驟中生成的矩形網(wǎng)絡(luò)確定路徑,本發(fā)明實施例中設(shè)定每個正方形的柵格的邊長為I個單位,且以柵格或得到的矩形網(wǎng)格為基礎(chǔ)進行擴張時,每次擴張均以柵格為單位進行擴張。
[0109]對于上述過程,為了便于理解,下面將以一個具體的例子進行詳細地解釋說明。
[0110]圖3為場景地圖,I為在場景地圖中隨機選的一個柵格,設(shè)定矩形的最大長寬比為2:1。在以選取的柵格為起點進行擴張時,以將柵格I先向X軸正方向擴張、后向Y軸正方向擴張為例,當將柵格I為起點向X軸正方向擴張一個單位時,可得到一個長為2個單位、寬為I個單位的矩形。由于該矩形的長寬比為2:1,恰為矩形的最大長寬比,因此,此時無法將得到的矩形以柵格I為起點向X軸正方向擴張,但可將得到的矩形以柵格I為起點向Y軸正方向擴張。當將得到的矩形向Y軸正方向擴張4個單位時,可得到一個長為4個單位、寬為2個單位的新矩形。由于該新矩形的長寬比為2:1,恰為矩形的最大長寬比,因此,此時無法將新矩形以柵格I為起點向Y軸正方向擴張,但可將新矩形以柵格I為起點向X軸正方向進行擴張。重復(fù)執(zhí)行上述擴張過程,直至以柵格I為起點向X軸正方向及Y軸正方向擴張的過程中遇到不可行走區(qū)域。獲取以柵格I為起點擴張得到的最后的矩形,并將該矩形作為第一矩形。
[0111]2)、以第一矩形中除起點所在柵格之外的每個柵格為起點分別進行擴張,并將擴張得到的各個矩形與第一矩形進行合并,得到滿足第一預(yù)設(shè)條件的第二矩形;
[0112]為了得到滿足第一預(yù)設(shè)條件且面積最大的矩形,在得到第一矩形之后,本實施例提供的方法還將以第一矩形中除起點所在柵格之外的每個柵格為起點進行擴張。由于第一矩形中包含著除起點以外的多個柵格,因此,通過以第一矩形中除起點所在柵格之外的每個柵格為起點進行擴張可得到多個滿足第一預(yù)設(shè)條件的矩形。由于得到的多個滿足第一預(yù)設(shè)條件的矩形與第一矩形鄰接,因此,可將得到的多個滿足第一預(yù)設(shè)條件的矩形與第一矩形進行合并,從而得到滿足第一預(yù)設(shè)條件的第二矩形。例如,以上述圖3中得到的第一矩形為基礎(chǔ),在以第一矩形中除起點之外的每個柵格為起點進行擴張,可得到多個以第一矩形中除起點之外的每個柵格為起點的矩形。由于這些矩形是以圖3中的第一矩形中除起點之外的柵格為起點進行擴張得到的,因此,得到的多個滿足第一預(yù)設(shè)條件的柵格為第一矩形的鄰接矩形,此時可將得到的多個滿足第一預(yù)設(shè)條件的矩形與第一矩形進行合并,合并后得到的矩形可參見圖4,該矩形即為滿足第一預(yù)設(shè)條件的第二矩形。
[0113]3)、獲取第一矩形的面積及第二矩形的面積,并將第二矩形的面積與第一矩形的面積進行比較,若第二矩形的面積大于第一矩形的面積,則判斷第二矩形是否滿足第二預(yù)設(shè)條件,如果第二矩形不滿足第二預(yù)設(shè)條件,則按照對第一矩形的處理方式處理第二矩形,依次循環(huán),直至獲取到滿足第二預(yù)設(shè)條件的矩形,并將滿足第二預(yù)設(shè)條件的矩形作為以選取的柵格為起點且面積最大的矩形網(wǎng)格。
[0114]由于第二矩形是以第一矩形中除起點之外的柵格為基礎(chǔ)進行擴張得到的,在以第一矩形中除起點之外的柵格為基礎(chǔ)進行擴張時,可能存在以下兩種情況:以第一矩形中除起點之前的柵格為基礎(chǔ)進行擴張得到的第二矩形面積比第一矩形面積大,以第一矩形中除起點之前的柵格為基礎(chǔ)進行擴張得到的第二矩形面積與第一矩形面積相等,而本實施例中以第一矩形中除起點之外的柵格為基礎(chǔ)進行擴張的目的是為了得到比第一矩形面積更大的矩形,因此,在以第一矩形中除起點之外的柵格為基礎(chǔ)進行擴張得到第二矩形之后,還需要獲取第一矩形的面積及第二矩形的面積,并將第二矩形的面積與第一矩形的面積進行比較,當?shù)诙匦蔚拿娣e大于第一矩形的面積,說明第二矩形中包含的可行走區(qū)域要比第一矩形中包含的可行走區(qū)域要大,此時若第二矩形不滿足第二預(yù)設(shè)條件,則將按照對第一矩形的處理方式處理第二矩形。具體地,可以第二矩形中除起點所在柵格之外的每個柵格為起點分別進行擴張,并將擴張得到的各個矩形與第二矩形進行合并,得到滿足第一預(yù)設(shè)條件的第三矩形,判斷得到的第三矩形的面積是否大于第二矩形的面積,當?shù)谌匦蔚拿娣e大于第二矩形的面積且第三矩形不滿足第二預(yù)設(shè)條件,則以第三矩形中除起點所在柵格之外的每個柵格為起點分別進行擴張,并將擴張得到的各個矩形與第三矩形進行合并,得到滿足第一預(yù)設(shè)條件的第四矩形,依次循環(huán),直至獲取到滿足第二預(yù)設(shè)條件的矩形,并將滿足第二預(yù)設(shè)條件的矩形作為以選取的柵格為起點且面積最大的矩形網(wǎng)格。其中,第二預(yù)設(shè)條件包括但不限于擴張次數(shù)達到預(yù)設(shè)次數(shù)、擴張后的矩形面積與擴張前的矩形面積差小于預(yù)設(shè)閾值,本實施例不對第二預(yù)設(shè)條件作具體的限定。具體地,預(yù)設(shè)次數(shù)可以為3次、5次、6次等,本實施例不對預(yù)設(shè)次數(shù)作具體的限定。預(yù)設(shè)閾值可以為I個柵格的面積、2個柵格的面積、3個柵格的面積等,本實施例不對預(yù)設(shè)閾值作具體的限定。
[0115]另外,為了便于區(qū)分矩形網(wǎng)格內(nèi)與矩形網(wǎng)格外的柵格,在本實施例中將矩形網(wǎng)格內(nèi)的柵格作為處理過的柵格,將矩形網(wǎng)格外的柵格作為未處理的柵格。
[0116]4)、依次在場景地圖的所有未處理的柵格中隨機選取一個未處理的柵格,采用遞歸方式以選取的柵格為起點在場景地圖上向其他未處理的柵格所在的區(qū)域進行擴張,得到一個以選取的柵格為起點且面積最大的矩形網(wǎng)格,直至場景地圖的所有柵格均被處理;
[0117]上述過程僅以對場景地圖中的一個未處理的柵格進行擴張?zhí)幚淼玫揭粋€以選取的柵格為起點且面積最大的矩形網(wǎng)格為例進行說明的,對于場景地圖中的其他未處理的柵格均可采用上述方法以選取的柵格為起點在場景地圖上向其他未處理的柵格所在的區(qū)域進行擴張,直至場景地圖中的所有表征可行走區(qū)域的柵格均被處理,從而得到多個以選取的柵格為起點且面積最大的矩形網(wǎng)格。
[0118]5)獲取得到的所有矩形網(wǎng)格,并根據(jù)得到的所有矩形網(wǎng)格生成矩形網(wǎng)絡(luò)。
[0119]雖然通過上述過程可得到多個矩形網(wǎng)格,但得到的各個矩形網(wǎng)格之間彼此是獨立的,此時可通過獲取各個矩形網(wǎng)格的鄰接邊信息,并將鄰接邊信息保存到鄰接的矩形網(wǎng)格中,從而使得鄰接的矩形網(wǎng)格之間彼此聯(lián)通,最終得到一個矩形網(wǎng)絡(luò)。其中,鄰接邊信息包括但不限于矩形網(wǎng)格的屬性信息及矩形網(wǎng)格的每條邊上鄰接的其他矩形網(wǎng)格的屬性信息等,本實施例不對鄰接邊信息作具體的限定。其中,屬性信息包括但不限于矩形的ID、邊長等信息。
[0120]進一步地,由于本實施例提供的方法所確定的路徑為起點到終點之間的路