本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體而言,涉及一種單位的尋路方法及裝置。
背景技術(shù):
自動(dòng)尋路作為一種新興的技術(shù),具備便捷、智能化等諸多優(yōu)點(diǎn),現(xiàn)如今已經(jīng)被應(yīng)用在了各個(gè)領(lǐng)域,以游戲領(lǐng)域?yàn)槔?,自?dòng)尋路功能是為了滿足從傳統(tǒng)的角色扮演游戲(PRG)向新時(shí)代的RPG過(guò)度的需求,衍生而來(lái)的一項(xiàng)功能。由于新手玩家進(jìn)入游戲后,對(duì)游戲的諸多規(guī)則不甚了解,特別是對(duì)游戲地圖知之甚少,由此造成了新手玩家對(duì)該款游戲上手難度大幅提升,并且也極大地延長(zhǎng)了游戲玩家真正獲得游戲核心樂(lè)趣的時(shí)間。
自動(dòng)尋路功能的問(wèn)世,在較大程度上解決了新手玩家在游戲前期難以找到各種類型非玩家控制(NPC),其可以包括但不限于:提供新手指引的NPC、提供商品交易服務(wù)的NPC、提供新手任務(wù)的NPC、提供裝備修理服務(wù)的NPC,同時(shí)還難以摸清在游戲地圖上設(shè)置的為新手玩家初期練級(jí)的怪物的分布。為了解決新手玩家的上述困惑,自動(dòng)尋路功能在不影響游戲性能的同時(shí),還會(huì)為游戲玩家?guī)?lái)更多的便利,從而使得游戲玩家盡早熟悉游戲過(guò)程,更容易感受到游戲的魅力。
目前,游戲通常所采用的尋路計(jì)算過(guò)程如下:
第一步、在游戲場(chǎng)景中指定一條完整運(yùn)動(dòng)路線,該運(yùn)動(dòng)路線上涵蓋了多個(gè)預(yù)先設(shè)定的尋路錨點(diǎn)。
第二步、特定游戲單位沿著該指定路徑保持行走狀態(tài)。
第三步、如果該特定游戲單位在尋路過(guò)程發(fā)生異常中斷,則需要重新回到尋路路徑上。
通常在游戲畫(huà)面中會(huì)存在畫(huà)面顯示的最大幀數(shù),而為了確保運(yùn)算效率,坐標(biāo)變換的周期通常為每幀圖像更新一次。然而,在每幀圖像更新過(guò)程中,很有可能會(huì)發(fā)生從當(dāng)前尋路錨點(diǎn)到相鄰的下一個(gè)尋路錨點(diǎn)之間的距離或者在當(dāng)前尋路錨點(diǎn)與相鄰的下一個(gè)尋路錨點(diǎn)之間的路段上的特定位置到相鄰的下一個(gè)尋路錨點(diǎn)的距離不足一幀圖像對(duì)應(yīng)的游戲單位的移動(dòng)距離,而坐標(biāo)變換的周期又是每幀圖像更新一次時(shí),便會(huì)造成游戲單位在運(yùn)動(dòng)過(guò)程中出現(xiàn)卡頓現(xiàn)象,并且在經(jīng)過(guò)拐彎時(shí),游戲單位在游戲畫(huà)面中的運(yùn)行速度是與各個(gè)尋路錨點(diǎn)之間的距離相關(guān)的。
針對(duì)上述的問(wèn)題,目前尚未提出有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種單位的尋路方法及裝置,以至少解決相關(guān)技術(shù)中提供的尋路方式在經(jīng)過(guò)尋路錨點(diǎn)時(shí)易出現(xiàn)卡頓現(xiàn)象,用戶體驗(yàn)不流暢的技術(shù)問(wèn)題。
根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種單位的尋路方法,包括:
在地圖的規(guī)劃路線上選取至少兩個(gè)尋路錨點(diǎn);采用至少兩個(gè)尋路錨點(diǎn)確定單位的運(yùn)動(dòng)軌跡;從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置。
可選地,從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置包括:計(jì)算步驟:根據(jù)單位的移動(dòng)速度計(jì)算單位在當(dāng)前幀圖像的位移變化;處理步驟:采用運(yùn)動(dòng)軌跡上與當(dāng)前幀圖像對(duì)應(yīng)的起始位置坐標(biāo)和位移變化計(jì)算運(yùn)動(dòng)軌跡上與當(dāng)前幀圖像對(duì)應(yīng)的結(jié)束位置坐標(biāo),控制單位移動(dòng)至結(jié)束位置坐標(biāo),并將結(jié)束位置坐標(biāo)設(shè)置為運(yùn)動(dòng)軌跡上與下一幀圖像對(duì)應(yīng)的起始位置坐標(biāo),返回計(jì)算步驟。
可選地,上述單位在高度方向上高于地圖內(nèi)設(shè)置的全部場(chǎng)景物件的高度。
可選地,在從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置之后,還包括:當(dāng)單位因特定事件偏離運(yùn)動(dòng)軌跡時(shí),沿運(yùn)動(dòng)軌跡的運(yùn)動(dòng)方向獲取單位待回歸的尋路錨點(diǎn);控制單位移動(dòng)至待回歸的尋路錨點(diǎn)。
可選地,當(dāng)待回歸的尋路錨點(diǎn)是與單位的偏離位置坐標(biāo)距離最近的尋路錨點(diǎn)時(shí),沿運(yùn)動(dòng)軌跡的運(yùn)動(dòng)方向獲取單位待回歸的尋路錨點(diǎn)包括:獲取與單位所在偏離位置距離最近的第一尋路錨點(diǎn)以及在運(yùn)動(dòng)方向上與第一尋路錨點(diǎn)相鄰的第二尋路錨點(diǎn);計(jì)算第一尋路錨點(diǎn)與第二尋路錨點(diǎn)之間的第一距離以及偏離位置與第二尋路錨點(diǎn)之間的第二距離;當(dāng)?shù)谝痪嚯x大于第二距離時(shí),則將第二尋路錨點(diǎn)設(shè)置為待回歸的尋路錨點(diǎn);當(dāng)?shù)谝痪嚯x小于第二距離時(shí),則將第一尋路錨點(diǎn)設(shè)置為待回歸的尋路錨點(diǎn)。
可選地,在從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置之后,還包括:當(dāng)單位移動(dòng)至運(yùn)動(dòng)軌跡的終點(diǎn)位置時(shí),保持與終點(diǎn)位置對(duì)應(yīng)的高度方向上的坐標(biāo)繼續(xù)移動(dòng),直至在重新回到運(yùn)動(dòng)軌跡的起始位置后,將與終點(diǎn)位置對(duì)應(yīng)的高度方向上的坐標(biāo)調(diào)整為與運(yùn)動(dòng)軌跡的起始位置對(duì)應(yīng)的高度方向上的坐標(biāo)。
根據(jù)本發(fā)明實(shí)施例的另一方面,還提供了一種單位的尋路裝置,包括:
選取模塊,用于在地圖的規(guī)劃路線上選取至少兩個(gè)尋路錨點(diǎn);確定模塊,用于采用至少兩個(gè)尋路錨點(diǎn)確定單位的運(yùn)動(dòng)軌跡;第一獲取模塊,用于從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置。
可選地,第一獲取模塊包括:第二計(jì)算單元,用于根據(jù)單位的移動(dòng)速度計(jì)算單位在當(dāng)前幀圖像的位移變化;第一處理單元,用于采用運(yùn)動(dòng)軌跡上與當(dāng)前幀圖像對(duì)應(yīng)的起始位置坐標(biāo)和位移變化計(jì)算運(yùn)動(dòng)軌跡上與當(dāng)前幀圖像對(duì)應(yīng)的結(jié)束位置坐標(biāo),控制單位移動(dòng)至結(jié)束位置坐標(biāo),并將結(jié)束位置坐標(biāo)設(shè)置為運(yùn)動(dòng)軌跡上與下一幀圖像對(duì)應(yīng)的起始位置坐標(biāo),返回第二計(jì)算單元。
可選地,上述單位在高度方向上高于地圖內(nèi)設(shè)置的全部場(chǎng)景物件的高度。
可選地,上述裝置還包括:第二獲取模塊,用于當(dāng)單位因特定事件偏離運(yùn)動(dòng)軌跡時(shí),沿運(yùn)動(dòng)軌跡的運(yùn)動(dòng)方向獲取單位待回歸的尋路錨點(diǎn);控制模塊,用于控制單位移動(dòng)至待回歸的尋路錨點(diǎn)。
可選地,第二獲取模塊包括:獲取單元,用于當(dāng)待回歸的尋路錨點(diǎn)是與單位的偏離位置坐標(biāo)距離最近的尋路錨點(diǎn)時(shí),獲取與單位所在偏離位置距離最近的第一尋路錨點(diǎn)以及在運(yùn)動(dòng)方向上與第一尋路錨點(diǎn)相鄰的第二尋路錨點(diǎn);第三計(jì)算單元,用于計(jì)算第一尋路錨點(diǎn)與第二尋路錨點(diǎn)之間的第一距離以及偏離位置與第二尋路錨點(diǎn)之間的第二距離;第二處理單元,用于當(dāng)?shù)谝痪嚯x大于第二距離時(shí),則將第二尋路錨點(diǎn)設(shè)置為待回歸的尋路錨點(diǎn);當(dāng)?shù)谝痪嚯x小于第二距離時(shí),則將第一尋路錨點(diǎn)設(shè)置為待回歸的尋路錨點(diǎn)。
可選地,上述裝置還包括:處理模塊,用于當(dāng)單位移動(dòng)至運(yùn)動(dòng)軌跡的終點(diǎn)位置時(shí),保持與終點(diǎn)位置對(duì)應(yīng)的高度方向上的坐標(biāo)繼續(xù)移動(dòng),直至在重新回到運(yùn)動(dòng)軌跡的起始位置后,將與終點(diǎn)位置對(duì)應(yīng)的高度方向上的坐標(biāo)調(diào)整為與運(yùn)動(dòng)軌跡的起始位置對(duì)應(yīng)的高度方向上的坐標(biāo)。
在本發(fā)明實(shí)施例中,采用在地圖的規(guī)劃路線上選取多個(gè)尋路錨點(diǎn)并利用上述多個(gè)尋路錨點(diǎn)確定單位的運(yùn)動(dòng)軌跡的方式,通過(guò)從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置,達(dá)到了避免在尋路過(guò)程中因每幀圖像刷新導(dǎo)致的在尋路錨點(diǎn)上出現(xiàn)明顯卡頓的目的,從而實(shí)現(xiàn)了提高畫(huà)面的流暢度、提升用戶體驗(yàn)的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中提供的尋路方式在經(jīng)過(guò)尋路錨點(diǎn)時(shí)易出現(xiàn)卡頓現(xiàn)象,用戶體驗(yàn)不流暢的技術(shù)問(wèn)題。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1是根據(jù)本發(fā)明實(shí)施例的單位的尋路方法的流程圖;
圖2是根據(jù)本發(fā)明優(yōu)選實(shí)施例一的在運(yùn)動(dòng)軌跡上獲取下一個(gè)即將抵達(dá)的尋路錨點(diǎn)的示意圖;
圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例二的在運(yùn)動(dòng)軌跡上獲取下一個(gè)即將抵達(dá)的尋路錨點(diǎn)的示意圖;
圖4是根據(jù)本發(fā)明實(shí)施例的單位的尋路裝置的結(jié)構(gòu)框圖;
圖5是根據(jù)本發(fā)明實(shí)施例的單位的尋路裝置的結(jié)構(gòu)框圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
需要說(shuō)明的是,本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
根據(jù)本發(fā)明實(shí)施例,提供了一種單位的尋路方法的實(shí)施例,需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
圖1是根據(jù)本發(fā)明實(shí)施例的單位的尋路方法的流程圖,如圖1所示,該方法包括如下步驟:
步驟S10,在地圖的規(guī)劃路線上選取至少兩個(gè)尋路錨點(diǎn);
步驟S12,采用至少兩個(gè)尋路錨點(diǎn)確定單位的運(yùn)動(dòng)軌跡;
步驟S14,從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置。
通過(guò)上述步驟,可以采用在地圖的規(guī)劃路線上選取多個(gè)尋路錨點(diǎn)并利用上述多個(gè)尋路錨點(diǎn)確定單位的運(yùn)動(dòng)軌跡的方式,通過(guò)從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置,達(dá)到了避免在尋路過(guò)程中因每幀圖像刷新導(dǎo)致的在尋路錨點(diǎn)上出現(xiàn)明顯卡頓的目的,從而實(shí)現(xiàn)了提高畫(huà)面的流暢度、提升用戶體驗(yàn)的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中提供的尋路方式在經(jīng)過(guò)尋路錨點(diǎn)時(shí)易出現(xiàn)卡頓現(xiàn)象,用戶體驗(yàn)不流暢的技術(shù)問(wèn)題。
需要說(shuō)明的是,為了對(duì)本發(fā)明實(shí)施例提供的單位的尋路方法的具體實(shí)施過(guò)程作進(jìn)一步詳細(xì)說(shuō)明,下文中僅以游戲場(chǎng)景中的游戲單位(例如:玩家控制的游戲角色)的自動(dòng)尋路過(guò)程為例加以描述,但其并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定,上述單位的尋路方法仍然可以應(yīng)用于除游戲領(lǐng)域之外的其他可以適用該技術(shù)方案的領(lǐng)域。
為了實(shí)現(xiàn)特定游戲單位沿一條指定軌跡在道路上運(yùn)動(dòng),需要設(shè)置一定數(shù)量的尋路錨點(diǎn)。而由于在不同的游戲地圖中,地形與道具的配置方式存在差異,因此,需要運(yùn)行地圖編輯器,在整條道路上選取尋路錨點(diǎn)。此處,需要注意以下幾點(diǎn):
(1)在兩個(gè)尋路錨點(diǎn)之間需要保持路段通暢,不能存在阻礙游戲單位前行的設(shè)置。換言之,即便游戲引擎配置有自動(dòng)生成尋路功能,但是如果兩個(gè)尋路錨點(diǎn)之間中存在阻礙游戲單位前行的障礙物,則會(huì)發(fā)生游戲單位對(duì)墻體進(jìn)行剮蹭的異常表現(xiàn)效果,并且如果游戲地圖本身的地形較為復(fù)雜,則還有可能會(huì)造成游戲單位在尋路過(guò)程中直接卡在阻礙游戲單位前行的設(shè)置處,進(jìn)而造成整個(gè)尋路過(guò)程中斷。
(2)在設(shè)計(jì)游戲場(chǎng)景時(shí),應(yīng)當(dāng)盡量避免平滑的曲線拐彎的路面設(shè)計(jì),其原因在于:此種設(shè)計(jì)方式一方面會(huì)導(dǎo)致需要選取過(guò)多的尋路錨點(diǎn),特定游戲單位在自動(dòng)尋路過(guò)程中,會(huì)加大用戶終端或服務(wù)器的負(fù)載壓力;另一方面,頻繁選取尋路錨點(diǎn)易造成載具在拐彎過(guò)程中頻繁地發(fā)生轉(zhuǎn)動(dòng),為此,還需要設(shè)計(jì)特定程序來(lái)處理拐彎行為,否則會(huì)在游戲過(guò)程中給游戲玩家?guī)?lái)違和感。
如果在游戲過(guò)程中,確實(shí)存在特殊需求需要使得尋路過(guò)程看起來(lái)更加平滑,此時(shí),可以選取一定數(shù)量的尋路錨點(diǎn),同時(shí)還需要設(shè)定經(jīng)由這些尋路錨點(diǎn)進(jìn)行尋路的過(guò)程中,游戲單位需要進(jìn)行平滑尋路。然后,再將選取的尋路錨點(diǎn)帶入方程求根公式中進(jìn)行計(jì)算,如果選取兩個(gè)尋路錨點(diǎn),那么通過(guò)兩個(gè)尋路錨點(diǎn),可以確定出軌跡為一條直線,則需要建立二元一次方程;如果選取三個(gè)尋路錨點(diǎn),可以確定出軌跡為一條曲線,則需要建立二元二次方程。例如:當(dāng)前選取三個(gè)尋路錨點(diǎn),其中,尋路錨點(diǎn)A的坐標(biāo)為(1,1)、尋路錨點(diǎn)B的坐標(biāo)為(1,-1),尋路錨點(diǎn)C的坐標(biāo)為(2,1)將這三個(gè)尋路錨點(diǎn)帶入aX2+b*X+c=Y(jié)的曲線函數(shù)中可以計(jì)算得出系數(shù)a、b和c的取值分別為:a=2,b=-4,c=1,進(jìn)而得到軌跡函數(shù)為Y=2X2-4X+1。最終,游戲單位將在Y=2X2-4X+1的軌跡上進(jìn)行自動(dòng)尋路。
需要注意的是,上述計(jì)算過(guò)程的復(fù)雜度以及需要消耗的硬件資源會(huì)隨著尋路錨點(diǎn)選取數(shù)量的增多而不斷加大,為此,需要控制尋路錨點(diǎn)的選取數(shù)量,以避免計(jì)算復(fù)雜度過(guò)高,同時(shí)還需要避免消耗過(guò)多的硬件資源。
可選地,在步驟S14中,從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置可以包括以下執(zhí)行步驟:
步驟S141,根據(jù)單位的移動(dòng)速度計(jì)算單位在當(dāng)前幀圖像的位移變化;
步驟S142,采用運(yùn)動(dòng)軌跡上與當(dāng)前幀圖像對(duì)應(yīng)的起始位置坐標(biāo)和位移變化計(jì)算運(yùn)動(dòng)軌跡上與當(dāng)前幀圖像對(duì)應(yīng)的結(jié)束位置坐標(biāo),控制單位移動(dòng)至結(jié)束位置坐標(biāo),并將結(jié)束位置坐標(biāo)設(shè)置為運(yùn)動(dòng)軌跡上與下一幀圖像對(duì)應(yīng)的起始位置坐標(biāo),返回步驟S141,如此,則實(shí)現(xiàn)了將所述單位沿著所述運(yùn)動(dòng)軌跡依次移動(dòng)至所述每一幀圖像對(duì)應(yīng)的結(jié)束位置。
在優(yōu)選實(shí)施過(guò)程中,上述單位在高度方向上高于游戲地圖內(nèi)設(shè)置的全部場(chǎng)景物件的高度。
根據(jù)上述計(jì)算得到的自動(dòng)尋路軌跡確定特定游戲單位在每一幀圖像中發(fā)生的位移變化,即該特定游戲單位在每一幀圖像開(kāi)始播放時(shí)對(duì)應(yīng)的在自動(dòng)尋路軌跡上的起始位置至結(jié)束位置的積分運(yùn)算結(jié)果等于起始位置與結(jié)束位置之間的線段長(zhǎng)度,由此,可以最終計(jì)算得到結(jié)束位置的坐標(biāo)。然后再結(jié)合第三步計(jì)算得到的與每幀圖像對(duì)應(yīng)的從起始位置至結(jié)束位置的運(yùn)動(dòng)變化過(guò)程,在游戲畫(huà)面中加以顯示。
不同于相關(guān)技術(shù)中提供的在尋路過(guò)程中僅尋找相鄰的下一個(gè)尋路錨點(diǎn),而是為滿足平滑拐彎的需求,假設(shè)在當(dāng)前存在的尋路錨點(diǎn)A的基礎(chǔ)上預(yù)先加載另外三個(gè)尋路錨點(diǎn),即尋路錨點(diǎn)B,尋路錨點(diǎn)C和尋路錨點(diǎn)D。
如果從當(dāng)前所在的尋路錨點(diǎn)A至下一個(gè)相鄰的尋路錨點(diǎn)B之間的距離無(wú)法滿足不足一幀圖像變化的需求時(shí),采用尋路錨點(diǎn)B到達(dá)下一個(gè)相鄰的尋路錨點(diǎn)C之間的部分移動(dòng)軌跡來(lái)補(bǔ)齊,具體使用以下規(guī)則:
(1)假設(shè)完整的尋路路徑為:尋路錨點(diǎn)A→尋路錨點(diǎn)B→尋路錨點(diǎn)C→尋路錨點(diǎn)D,且游戲單位當(dāng)前位于尋路錨點(diǎn)A;
(2)通過(guò)采用游戲單位當(dāng)前位于的尋路錨點(diǎn)A的坐標(biāo)以及游戲單位自身的移動(dòng)速度計(jì)算出與一幀圖像播放結(jié)束后對(duì)應(yīng)的目標(biāo)位置坐標(biāo)。如果在游戲單位達(dá)到尋路錨點(diǎn)B時(shí),尚未達(dá)到一幀圖像播放結(jié)束后對(duì)應(yīng)的目標(biāo)位置坐標(biāo),則計(jì)算出的目標(biāo)位置坐標(biāo)可能位于尋路錨點(diǎn)B→尋路錨點(diǎn)C的軌跡上;
(3)通過(guò)計(jì)算出的目標(biāo)位置坐標(biāo)確定在尋路錨點(diǎn)B→尋路錨點(diǎn)C軌跡上的實(shí)際位置并將游戲單位移動(dòng)至該目標(biāo)位置坐標(biāo)。
另外,特定游戲單位能夠進(jìn)行循環(huán)移動(dòng)的充分且必要條件在于:尋路錨點(diǎn)需要構(gòu)成首尾相連的環(huán)形線路。
當(dāng)特定游戲單位在程序邏輯中被設(shè)定為普通單位時(shí),會(huì)導(dǎo)致該特定游戲單位遭受到諸多限制,例如:被空氣墻阻擋、被怪獸碰撞阻擋,因此,需要通過(guò)設(shè)計(jì)特定程序以使得特定游戲單位可以無(wú)視這些障礙物而正常徑直移動(dòng)。
當(dāng)游戲場(chǎng)景中的碰撞事件是通過(guò)該游戲場(chǎng)景中各個(gè)游戲單位的碰撞體積進(jìn)行計(jì)算時(shí),處于循環(huán)移動(dòng)狀態(tài)下的游戲單位會(huì)在一定程度上穿越無(wú)法正常通過(guò)的區(qū)域。此時(shí),該游戲單位在游戲場(chǎng)景中的碰撞規(guī)則需要進(jìn)行以下修改:該游戲單位需要能夠無(wú)視游戲場(chǎng)景中其他游戲單位的碰撞,能夠穿透所有游戲單位,而且該游戲單位只需要保持在高度方向上(Y軸)高于除交互對(duì)象單位(例如:怪獸、NPC)之外的場(chǎng)景物件(例如:樹(shù)木、路障、拱橋)的最大高度,便能夠完成在不可行走區(qū)域進(jìn)行循環(huán)移動(dòng)。
可選地,在步驟S14,從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置之后,還可以包括以下執(zhí)行步驟:
步驟S15,當(dāng)單位因特定事件偏離運(yùn)動(dòng)軌跡時(shí),沿運(yùn)動(dòng)軌跡的運(yùn)動(dòng)方向獲取單位待回歸的尋路錨點(diǎn);
步驟S16,控制單位移動(dòng)至待回歸的尋路錨點(diǎn)。
如果在游戲過(guò)程中開(kāi)啟游戲單位自動(dòng)尋路過(guò)程,并且在尋路過(guò)程中因遇到特定事件(例如:脫離運(yùn)動(dòng)軌跡去擊殺不定時(shí)刷出的怪物以獲取裝備和經(jīng)驗(yàn)值),則在成功擊殺怪物后,需要回歸至原有的運(yùn)動(dòng)軌跡。此時(shí),需要在運(yùn)動(dòng)軌跡上獲取下一個(gè)即將抵達(dá)的尋路錨點(diǎn)。
可選地,在步驟S15中,當(dāng)待回歸的尋路錨點(diǎn)是與單位的偏離位置坐標(biāo)距離最近的尋路錨點(diǎn)時(shí),沿運(yùn)動(dòng)軌跡的運(yùn)動(dòng)方向獲取單位待回歸的尋路錨點(diǎn)可以包括以下執(zhí)行步驟:
步驟S151,獲取與單位所在偏離位置距離最近的第一尋路錨點(diǎn)以及在運(yùn)動(dòng)方向上與第一尋路錨點(diǎn)相鄰的第二尋路錨點(diǎn);
步驟S152,計(jì)算第一尋路錨點(diǎn)與第二尋路錨點(diǎn)之間的第一距離以及偏離位置與第二尋路錨點(diǎn)之間的第二距離;
步驟S153,當(dāng)?shù)谝痪嚯x大于第二距離時(shí),則將第二尋路錨點(diǎn)設(shè)置為待回歸的尋路錨點(diǎn);當(dāng)?shù)谝痪嚯x小于第二距離時(shí),則將第一尋路錨點(diǎn)設(shè)置為待回歸的尋路錨點(diǎn)。
獲取特定游戲單位在相鄰兩個(gè)尋路錨點(diǎn)之間的實(shí)際行走距離,分別計(jì)算出從該特定游戲單位從當(dāng)前尋路錨點(diǎn)到其余尋路錨點(diǎn)之間的距離,并尋找出與當(dāng)前尋路錨點(diǎn)之間距離最小的下一個(gè)尋路錨點(diǎn)。
圖2是根據(jù)本發(fā)明優(yōu)選實(shí)施例一的在運(yùn)動(dòng)軌跡上獲取下一個(gè)即將抵達(dá)的尋路錨點(diǎn)的示意圖。如圖2所示,a為所有尋路錨點(diǎn)中距離游戲單位當(dāng)前所在偏離位置的距離最近的尋路錨點(diǎn)B與游戲單位所在偏離位置之間的距離,b為尋路錨點(diǎn)B沿運(yùn)動(dòng)軌跡的運(yùn)動(dòng)方向上到下一個(gè)尋路錨點(diǎn)C之間的距離,c為游戲單位所在偏離位置到尋路錨點(diǎn)C之間的距離。當(dāng)b<c時(shí),游戲單位所在偏離位置當(dāng)前所要前往的尋路錨點(diǎn)為尋路錨點(diǎn)B。
圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例二的在運(yùn)動(dòng)軌跡上獲取下一個(gè)即將抵達(dá)的尋路錨點(diǎn)的示意圖。如圖3所示,a為所有尋路錨點(diǎn)中距離游戲單位當(dāng)前所在偏離位置的距離最近的尋路錨點(diǎn)B與游戲單位所在偏離位置之間的距離,b為尋路錨點(diǎn)B沿運(yùn)動(dòng)軌跡的運(yùn)動(dòng)方向上到下一個(gè)尋路錨點(diǎn)C之間的距離,c為游戲單位所在偏離位置到尋路錨點(diǎn)C之間的距離。當(dāng)b>c時(shí),游戲單位所在偏離位置當(dāng)前所要前往的尋路錨點(diǎn)為尋路錨點(diǎn)C。
上述功能同樣適用于:當(dāng)游戲玩家從手動(dòng)操控狀態(tài)切換至游戲單位自動(dòng)戰(zhàn)斗時(shí),如果游戲單位需要使用自動(dòng)尋路功能,則需要存在一個(gè)待抵達(dá)的尋路錨點(diǎn),并在每次到達(dá)尋路錨點(diǎn)后,需要將該尋路錨點(diǎn)的行進(jìn)方向指向下一個(gè)尋路錨點(diǎn)。
可選地,在步驟S14,從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置之后,還可以包括以下執(zhí)行步驟:
步驟S17,當(dāng)單位移動(dòng)至運(yùn)動(dòng)軌跡的終點(diǎn)位置時(shí),保持與終點(diǎn)位置對(duì)應(yīng)的高度方向上的坐標(biāo)繼續(xù)移動(dòng),直至在重新回到運(yùn)動(dòng)軌跡的起始位置后,將與終點(diǎn)位置對(duì)應(yīng)的高度方向上的坐標(biāo)調(diào)整為與運(yùn)動(dòng)軌跡的起始位置對(duì)應(yīng)的高度方向上的坐標(biāo)。
當(dāng)游戲場(chǎng)景使用的是游戲單位的碰撞體積而并非游戲單位的實(shí)際體積時(shí),該游戲場(chǎng)景的尋路過(guò)程需要進(jìn)行以下的處理:
(1)如果游戲單位運(yùn)動(dòng)至不可行走區(qū)域,則只需要保持該游戲單位原來(lái)的高度方向上的Y軸坐標(biāo),等待該游戲單位重新進(jìn)入可行走區(qū)域后,再將其坐標(biāo)調(diào)整為當(dāng)前尋路的Y軸坐標(biāo)高度。例如:游戲單位在重新進(jìn)入可行走區(qū)時(shí),該游戲單位保持的高度是20米,而剛進(jìn)入尋路區(qū)域的地面高度只有5米,就需要將該游戲單位的高度調(diào)整為5米。
(2)如果游戲單位碰撞到空氣墻,則只需要無(wú)視碰撞即可,其中,空氣墻特指在游戲場(chǎng)景中生成的臨時(shí)墻,以使游戲單位無(wú)法正常經(jīng)過(guò)。
(3)如果要使游戲單位不與其它最近刷新的被攻擊對(duì)象單位(例如:副本內(nèi)的怪獸)重合,需要在經(jīng)過(guò)這類單位時(shí),通過(guò)尋路路徑繞開(kāi)這類單位,而不與這類單位發(fā)生碰撞重合,并且還可以無(wú)視不可行走區(qū)域。
例如:當(dāng)車輛開(kāi)過(guò)來(lái)時(shí),其最佳的視角是車輛迎面開(kāi)來(lái),為了保證車輛始終都是迎面開(kāi)來(lái),并且一個(gè)車輛是循環(huán)移動(dòng),而并非從初始點(diǎn)移動(dòng)到達(dá)終點(diǎn)之后即被銷毀,所以需要進(jìn)行上述配置。
根據(jù)本發(fā)明實(shí)施例,提供了一種單位的尋路裝置的實(shí)施例,圖4是根據(jù)本發(fā)明實(shí)施例的單位的尋路裝置的結(jié)構(gòu)框圖,如圖4所示,該裝置包括:選取模塊10,用于在地圖的規(guī)劃路線上選取多個(gè)尋路錨點(diǎn);確定模塊20,用于采用多個(gè)尋路錨點(diǎn)確定單位的運(yùn)動(dòng)軌跡;第一獲取模塊30,用于從運(yùn)動(dòng)軌跡的起始位置開(kāi)始根據(jù)單位在每一幀圖像的位移變化從運(yùn)動(dòng)軌跡上獲取與每一幀圖像對(duì)應(yīng)的結(jié)束位置。
可選地,第一獲取模塊30包括:第二計(jì)算單元(圖中未示出),用于根據(jù)單位的移動(dòng)速度計(jì)算單位在當(dāng)前幀圖像的位移變化;第一處理單元(圖中未示出),用于采用運(yùn)動(dòng)軌跡上與當(dāng)前幀圖像對(duì)應(yīng)的起始位置坐標(biāo)和位移變化計(jì)算運(yùn)動(dòng)軌跡上與當(dāng)前幀圖像對(duì)應(yīng)的結(jié)束位置坐標(biāo),控制單位移動(dòng)至結(jié)束位置坐標(biāo),并將結(jié)束位置坐標(biāo)設(shè)置為運(yùn)動(dòng)軌跡上與下一幀圖像對(duì)應(yīng)的起始位置坐標(biāo),返回第二計(jì)算單元。
在優(yōu)選實(shí)施過(guò)程中,上述單位在高度方向上高于地圖內(nèi)設(shè)置的全部場(chǎng)景物件的高度。
可選地,圖5是根據(jù)本發(fā)明實(shí)施例的單位的尋路裝置的結(jié)構(gòu)框圖,如圖5所示,上述裝置還可以包括:第二獲取模塊40,用于當(dāng)單位因特定事件偏離運(yùn)動(dòng)軌跡時(shí),沿運(yùn)動(dòng)軌跡的運(yùn)動(dòng)方向獲取單位待回歸的尋路錨點(diǎn);控制模塊50,用于控制單位移動(dòng)至待回歸的尋路錨點(diǎn)。
可選地,第二獲取模塊40包括:獲取單元(圖中未示出),用于獲取與單位所在偏離位置距離最近的第一尋路錨點(diǎn)以及在運(yùn)動(dòng)方向上與第一尋路錨點(diǎn)相鄰的第二尋路錨點(diǎn);第三計(jì)算單元(圖中未示出),用于計(jì)算第一尋路錨點(diǎn)與第二尋路錨點(diǎn)之間的第一距離以及偏離位置與第二尋路錨點(diǎn)之間的第二距離;第二處理單元(圖中未示出),用于當(dāng)?shù)谝痪嚯x大于第二距離時(shí),則將第二尋路錨點(diǎn)設(shè)置為待回歸的尋路錨點(diǎn);當(dāng)?shù)谝痪嚯x小于第二距離時(shí),則將第一尋路錨點(diǎn)設(shè)置為待回歸的尋路錨點(diǎn)。
可選地,如圖5所示,上述裝置還可以包括:處理模塊60,用于當(dāng)單位移動(dòng)至運(yùn)動(dòng)軌跡的終點(diǎn)位置時(shí),保持與終點(diǎn)位置對(duì)應(yīng)的高度方向上的坐標(biāo)繼續(xù)移動(dòng),直至在重新回到運(yùn)動(dòng)軌跡的起始位置后,將與終點(diǎn)位置對(duì)應(yīng)的高度方向上的坐標(biāo)調(diào)整為與運(yùn)動(dòng)軌跡的起始位置對(duì)應(yīng)的高度方向上的坐標(biāo)。
上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
在本發(fā)明的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述的部分,可以參見(jiàn)其他實(shí)施例的相關(guān)描述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過(guò)其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,可以為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、移動(dòng)硬盤(pán)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。