掌桥专利:专业的专利平台
掌桥专利
首页

地图寻路方法、装置、终端和存储介质

文献发布时间:2023-06-19 13:51:08


地图寻路方法、装置、终端和存储介质

技术领域

本发明涉及游戏寻路领域,具体涉及一种地图寻路方法、装置、终端和计算机可读存储介质。

背景技术

在游戏中,通过会提供寻路功能,以帮助玩家找出一条移动到非玩家角色(non-player character,NPC)的最短路径。

现有技术中寻路有很多种实现方法,比如路点寻路,路点寻路算法都能在极快的时间内,给出玩家当前位置到场景的另一个对象附近的一条可达路径。

然而,路点寻路算法的寻路速度取决于地图内路点的搜索空间,当地图内路点的搜索空间相对较小时,路点寻路算法的寻路速度也相对较快;当地图内路点的搜索空间相对较大时,路点寻路算法的寻路速度也相对较慢。因此,当地图规模增大时,地图内路点的搜索空间也会随着增大,以至于当地图大到一定范围,寻路消耗的时间会引起游戏的卡顿。

发明内容

本发明实施例提供一种地图寻路方法、装置、终端和计算机可读存储介质,可以降低寻路过程中路点的搜索空间,以缩短寻路消耗的时间,从而提高游戏的流畅性。

第一方面,本申请实施例提供一种地图寻路方法,包括:

从目标地图的各预设区域中,获取目标对象的起始路点所在的起始区域,以及所述目标对象的终止路点所在的终止区域;

获取所述目标地图中每两个预设区域间的连通信息;

获取所述目标地图中每两个连通区域间的区域距离;

基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径;

基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。

在一些实施例中,所述基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径,包括:

基于所述连通信息,获取由所述起始区域至所述终止区域之间的各连通区域路径,每个所述连通区域路径中的各途径区域均不同;

基于所述区域距离,获取每个所述连通区域路径的区域路径距离;

从各所述连通区域路径中获取所述区域路径距离最短的目标连通区域路径,以作为所述最近区域路径。

在一些实施例中,所述基于所述区域距离,获取每个所述连通区域路径的区域路径距离,包括:

获取每个所述连通区域路径的途径区域数;

若所述各预设区域中任意两个连通区域间的所述区域距离均相等,则将每个所述连通区域路径的途径区域数作为每个所述连通区域路径的区域路径距离。

在一些实施例中,所述两个连通区域包括第一预设区域和第二预设区域,所述获取所述各预设区域中每两个连通区域间的区域距离,包括:

确定所述第一预设区域内所有路点的最小包围矩形的第一中心点;

确定所述第二预设区域内所有路点的最小包围矩形的第二中心点;

获取所述第一中心点和所述第二中心点之间的距离,以作为所述区域距离。

在一些实施例中,所述连通信息包括所述目标地图中的第三预设区域和第四预设区域间是否连通,所述获取所述目标地图中每两个预设区域间的连通信息,包括:

检测所述第三预设区域各路点中是否存在与所述第四预设区域各路点中的至少一个路点连通的目标路点;

若所述第三预设区域中存在所述目标路点,则确定所述第三预设区域和所述第四预设区域连通;

若所述第三预设区域中不存在所述目标路点,则确定所述第三预设区域和所述第四预设区域不连通。

在一些实施例中,所述基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径,包括:

当所述起始区域与所述终止区域不同时,基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径;

所述方法还包括:

当所述起始区域与所述终止区域相同时,基于所述起始区域内各路点或所述终止区域内各路点,获取所述起始路点和所述终止路点之间的最近路点路径。

在一些实施例中,所述各预设区域中任意两个连通区域间的区域距离均相等,所述基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径,包括:

通过A*算法,基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径。

在一些实施例中,所述基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径,包括:

通过A*算法,基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。

在一些实施例中,所述方法还包括:

控制所述目标对象由所述起始路点沿所述最近路点路径移动至所述终止路点。

第二方面,本申请实施例还提供一种地图寻路装置,包括:

第一获取单元,用于从目标地图的各预设区域中,获取目标对象的起始路点所在的起始区域,以及所述目标对象的终止路点所在的终止区域;

第二获取单元,用于获取所述目标地图中每两个预设区域间的连通信息;

所述第二获取单元,还用于获取所述目标地图中每两个连通区域间的区域距离;

区域寻路单元,用于基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径;

路点寻路单元,用于基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。

在一些实施例中,所述区域寻路单元具体用于:

基于所述连通信息,获取由所述起始区域至所述终止区域之间的各连通区域路径,每个所述连通区域路径中的各途径区域均不同;

基于所述区域距离,获取每个所述连通区域路径的区域路径距离;

从各所述连通区域路径中获取所述区域路径距离最短的目标连通区域路径,以作为所述最近区域路径。

在一些实施例中,所述区域寻路单元具体用于:

获取每个所述连通区域路径的途径区域数;

若所述各预设区域中任意两个连通区域间的所述区域距离均相等,则将每个所述连通区域路径的途径区域数作为每个所述连通区域路径的区域路径距离。

在一些实施例中,所述两个连通区域包括第一预设区域和第二预设区域,所述第二获取单元具体用于:

确定所述第一预设区域内所有路点的最小包围矩形的第一中心点;

确定所述第二预设区域内所有路点的最小包围矩形的第二中心点;

获取所述第一中心点和所述第二中心点之间的距离,以作为所述区域距离。

在一些实施例中,所述连通信息包括所述目标地图中的第三预设区域和第四预设区域间是否连通,所述第二获取单元具体用于:

检测所述第三预设区域各路点中是否存在与所述第四预设区域各路点中的至少一个路点连通的目标路点;

若所述第三预设区域中存在所述目标路点,则确定所述第三预设区域和所述第四预设区域连通;

若所述第三预设区域中不存在所述目标路点,则确定所述第三预设区域和所述第四预设区域不连通。

在一些实施例中,所述区域寻路单元具体用于:

当所述起始区域与所述终止区域不同时,基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径;

在一些实施例中,所述路点寻路单元具体用于:

当所述起始区域与所述终止区域相同时,基于所述起始区域内各路点或所述终止区域内各路点,获取所述起始路点和所述终止路点之间的最近路点路径。

在一些实施例中,所述各预设区域中任意两个连通区域间的区域距离均相等,所述区域寻路单元具体用于:

通过A*算法,基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径。

在一些实施例中,所述路点寻路单元具体用于:

通过A*算法,基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。

在一些实施例中,所述地图寻路装置还包括移动单元,所述移动单元具体用于:

控制所述目标对象由所述起始路点沿所述最近路点路径移动至所述终止路点。

第三方面,本申请实施例还提供一种终端,包括存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行本申请实施例所提供的任一种地图寻路方法中的步骤。

第四方面,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本申请实施例所提供的任一种地图寻路方法中的步骤。

本申请实施例通过对目标地图划分为多个预设区域;获取目标地图中每两个预设区域间的连通信息、每两个连通区域间的区域距离,进行区域寻路得到起始区域和终止区域之间的最近区域路径;再基于最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径;第一方面,通过先进行区域寻路得到最近区域路径,再基于最近区域路径的各途径区域内路点进行路点寻路,由于只基于最近区域路径各区域内的路点进行路点寻路,无需针对整个目标地图进行路点寻路,可以极大地降低进行路点寻路时的路点搜索空间,从而可以降低寻路时的数据处理量,缩短了寻路消耗的时间、提高了寻路速度,进而提高游戏的流畅性。第二方面,由于只需获取目标地图中每两个连通区域间的区域距离进行处理,无需针对所有预设区域间计算两个预设区域间的区域距离,避免了获取不连通两预设区域间的区域距离导致无效数据处理;因而可以在满足寻路所需数据的基础上,降低区域距离的数据计算量,也在一定程度上可以降低寻路时的数据处理量,从而提高了寻路速度,进而提高游戏的流畅性。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的地图寻路方法的一种实施例流程示意图;

图2是本申请实施例中提供的目标地图内预先划分的各预设区域的一种示意图;

图3是本申请实施例中提供的路点与预设区域间的一种关系说明示意图;

图4是本申请实施例中提供的区域连通关系的一种说明示意图;

图5是本实施例提供的区域距离的一种说明示意图;

图6是本申请实施例中提供的地图寻路过程的一个示例说明示意图;

图7是本申请实施例提供的地图寻路装置的结构示意图;

图8是本申请实施例提供的计算机设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种地图寻路方法、装置、终端和计算机可读存储介质。

其中,该地图寻路装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、或者个人电脑(Personal Computer,PC)等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。

在一些实施例中,该地图寻路装置还可以集成在多个电子设备中,比如,地图寻路装置可以集成在多个服务器中,由多个服务器来实现本发明的地图寻路方法。

例如,在一些实施例中,该地图寻路装置可以集成在终端和服务器集群中,从而实现云游戏(Cloud Gaming)。

在一些实施例中,服务器也可以以终端的形式来实现,比如,可以将个人电脑设置服务器来集成该地图寻路装置。

例如,该电子设备可以是移动终端,该移动终端可以从目标地图的各预设区域中,获取目标对象的起始路点所在的起始区域,以及目标对象的终止路点所在的终止区域;获取目标地图中每两个预设区域间的连通信息;获取目标地图中每两个连通区域间的区域距离;基于连通信息和区域距离,获取起始区域和终止区域之间的最近区域路径;基于最近区域路径的各途径区域内路点,获取起始路点和终止路点之间的最近路点路径。

以下分别进行详细说明。需说明的是,以下实施例的序号不作为对实施例优选顺序的限定。

参照图1,图1是本申请实施例提供的地图寻路方法的一种流程示意图。需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。在本实施例中,该地图寻路方法包括步骤101~105,其中:

101、从目标地图的各预设区域中,获取目标对象的起始路点所在的起始区域,以及所述目标对象的终止路点所在的终止区域。

目标地图是指目标对象所处场景对应的地图,例如虚拟游戏角色所处游戏场景的地图。

目标对象是指待移动对象。比如,游戏中的虚拟游戏角色。

预设区域是在目标地图内预先划分的区域。其中,预设区域内包括至少一个路点,如图2所示,图2是本申请实施例中提供的目标地图内预先划分的各预设区域的一种示意图,图2中每个黑色小原点表示一个路点。

其中,路点是指目标地图中具有特定含义或目标的位置,比如,建筑、怪物、人物、草木河流等NPC的位置;又如,虚拟游戏角色抵达时会触发某段剧情的位置。

起始路点是指目标地图的各路点中,与目标对象起始位置最近的路点。如图3所示,目标对象需要从位置A移动至位置B,其中离位置A最近的路点为路点1,则位置A最近的路点1为起始路点。

终止路点是指目标地图的各路点中,与目标对象终止位置最近的路点。如图3所示,目标对象需要从位置A移动至位置B,其中离位置B最近的路点为路点2,则位置B最近的路点2为终止路点。

起始区域是指目标地图的各预设区域中,起始路点所落入的区域。如图3所示,起始路点(即路点1)所落入的预设区域(即区域a)为起始区域。

终止区域是指目标地图的各预设区域中,终止路点所落入的区域。如图3所示,终止路点(即路点2)所落入的预设区域(即区域c)为终止区域。

102、获取所述目标地图中每两个预设区域间的连通信息。

其中,连通信息用于指示目标地图的各预设区域中任意的每两个预设区域之间是否连通。

步骤102中获取每两个预设区域间的连通信息的方式有多种,示例性地,包括:

(一)预设数据库中存储了目标地图中每两个预设区域间的连通信息,从预设数据中可以直接调取目标地图中每两个预设区域间的连通信息。此时在步骤102之前,可以根据如下(二)中实时计算连通信息的方式,先确定目标地图中每两个预设区域间的连通信息,并存储至预设数据库中。

当步骤102中的连通信息可以直接从预设数据库中读取时,即步骤102中的连通信息在目标地图划分区域时预先已经确定好,那么步骤102的计算量将会得到大幅降低。

(二)实时计算目标地图中每两个预设区域间的连通信息。示例性地,目标地图中每两个预设区域包括第三预设区域和第四区域,计算“目标地图中每两个预设区域间的连通信息”具体表现为:确定第三预设区域和第四预设区域间是否连通,此时步骤102具体可以包括如下步骤1021~步骤1023,其中:

1021、检测所述第三预设区域各路点中是否存在与所述第四预设区域各路点中的至少一个路点连通的目标路点。

其中,第三预设区域是指目标地图的各预设区域中的任意一个预设区域。第四预设区域是指目标地图的各预设区域中,不同于第三预设区域的一个预设区域。

目标路点是指第三预设区域各路点中,与第四预设区域各路点的至少一个路点连通的路点。

示例性地,步骤1021具体可以通过如下a1~a8的流程实现:

a1、将第三预设区域内的各路点加入第一路点集合中。其中,第一路点集合中包括M个路点。

a2、将第四预设区域内的各路点加入第二路点集合中。其中,第二路点集合中包括N个路点。

a3、获取第一路点集合中的第i个路点。其中,1≤i≤M。

a4、遍历第二路点集合中的各路点,检测第二路点集合中的第j个路点是否与第i个路点连通。若第j个路点与第i个路点连通,跳转至a5;若第j个路点与第i个路点不连通,跳转至a6。其中,1≤j≤N。

a5、第三预设区域各路点中存在与第四预设区域各路点中的至少一个路点连通的目标路点,流程结束。

a6、检测是否满足i=M,若满足,跳转至a7;若不满足,跳转至a8。

a7、第三预设区域各路点中不存在与第四预设区域各路点中的至少一个路点连通的目标路点,流程结束。

a8、令i=i+1,重复步骤a3至a7。

1022、若所述第三预设区域中存在所述目标路点,则确定所述第三预设区域和所述第四预设区域连通。

例如,如图4所示,目标地图中两个预设区域(如区域a和区域b),第一路点集合{路点A1、A2、A3、A4、A5}为区域a(即第三预设区域)中包含的各路点。第二路点集合{路点B1、B2、B3、B4、B5}为区域b(即第四预设区域)中包含的各路点。图4中,每个黑点代表一个路点,两个路点之间连线表示两个路点连通。由于区域a中的路点A4与区域b的路点B1连通,即区域a各路点中存在与区域b各路点中的至少一个路点连通的目标路点(即路点A4),可以确定区域a和区域b连通。

同理,可以确定图4所示的目标地图中,区域a和区域b连通、区域b和区域c连通、区域b和区域d连通。

1023、若所述第三预设区域中不存在所述目标路点,则确定所述第三预设区域和所述第四预设区域不连通。

例如,如图4所示,目标地图中两个预设区域(如区域a和区域c),第一路点集合{路点A1、A2、A3、A4、A5}为区域a(即第三预设区域)中包含的各路点。第二路点集合{路点C1、C2}为区域c(即第四预设区域)中包含的各路点。由于区域a中的各路点与区域b的各路点均不连通,因此可以确定区域a和区域c不连通。

同理,可以确定图4所示的目标地图中,区域a和区域c、d均不连通、区域c和区域d不连通。

为了更好地理解上述步骤1021~步骤1023的实现,下面以一具体例子进行说明。例如,针对目标地图各预设区域中的每两个预设区域(记为第三预设区域和第四预设区域),可以通过如下步骤(1)~(8)实现:

(1)将第三预设区域内的各路点加入第一路点集合中。其中,第一路点集合中包括M个路点。

(2)将第四预设区域内的各路点加入第二路点集合中。其中,第二路点集合中包括N个路点。

(3)获取第一路点集合中的第i个路点。其中,1≤i≤M。

(4)遍历第二路点集合中的各路点,检测第二路点集合中是否存在与第i个路点连通的路点。若存在,跳转至(5);若不存在,跳转至(6)。

(5)确定第三预设区域和第四预设区域连通,流程结束。

(6)检测是否满足i=M,若满足,跳转至(7);若不满足,跳转至(8)。

(7)确定第三预设区域和第四预设区域不连通,流程结束。

(8)令i=i+1,重复步骤(3)至(7)。

如此,通过步骤(1)~(8),可以确定目标地图各预设区域中的每两个预设区域是否连通。

103、获取所述目标地图中每两个连通区域间的区域距离。

步骤103中获取每两个连通区域间的区域距离的方式有多种,示例性地,包括:

一)、预设数据库中存储了目标地图中的每两个连通区域间的区域距离,从预设数据中可以直接调取目标地图中每两个连通区域间的区域距离。此时在步骤103之前,可以根据如下二)中实时计算区域距离的方式,先确定目标地图中每两个连通区域间的区域距离,并存储至预设数据库中。

当步骤103中的区域距离可以直接从预设数据库中读取时,如步骤103中的区域距离在目标地图划分区域时预先已经计算好,那么步骤103的计算量将会得到大幅降低。

二)、实时计算目标地图中每两个连通区域间的区域距离。示例性地,目标地图中每两个连通区域包括第三预设区域和第四区域,计算“目标地图中每两个连通区域间的区域距离”具体表现为:确定第三预设区域和第四预设区域间是否连通,此时步骤103具体可以包括如下步骤1031~步骤1033,其中:

1031、确定所述第一预设区域内所有路点的最小包围矩形的第一中心点。

其中,第一中心点是指第一预设区域内所有路点的最小包围矩形的中心点。

1032、确定所述第二预设区域内所有路点的最小包围矩形的第二中心点。

其中,第二中心点是指第二预设区域内所有路点的最小包围矩形的中心点。

1033、获取所述第一中心点和所述第二中心点之间的距离,以作为所述区域距离。

如图5所示,假设第一预设区域、第二预设区域分别为图5中区域A和区域B,区域A内所有路点的最小包围矩形的中心点为O1(即第一中心点)、区域B内所有路点的最小包围矩形的中心点为O2(即第二中心点)。因此,两个连通区域(即图5中区域A和区域B)间的区域距离为中心点O1与中心点O2之间的距离。

由于当目标地图为不规则地图时,难以划分出完全规则的多个预设区域,而在现有技术中不规则预设区域之间距离一直存在难以统一判定标准的问题,因此一般是通过划分规则的区域以实现区域之间的距离判定。本申请实施例中通过将一个预设区域内所有路点的最小包围矩形的中心点与另一个预设区域内所有路点的最小包围矩形的中心点之间的距离,作为两个预设区域之间的区域距离,可以使得不规则预设区域时仍然可以较为精准地判定两预设区域间的区域距离。从而避免目标地图是不规则地图时,难以划分规则区域以致于区域间的距离判定不准问题。可见,本申请实施例中通过将一个预设区域内所有路点的最小包围矩形的中心点与另一个预设区域内所有路点的最小包围矩形的中心点之间的距离,作为两个预设区域之间的区域距离,第一方面,使得不规则预设区域时仍然可以较为精准地判定两预设区域间的区域距离。第二方面,使得在划分预设区域时,可以随意划分而不受形状限制,从而提高预设区域的划分效率、并使得进行预设区域划分时可以斟酌更多其他因素如路点数量的影响。

104、基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径。

其中,区域路径是指由多个预设区域构成的路径。

其中,最近区域路径是指目标地图的各预设区域中,由起始区域至终止区域之间最短的、且所经过的相邻两预设区域均是连通的区域路径。

步骤104中,确定最近区域路径的方式有多种,示例性地,包括:

一、先分别确定起始区域至终止路径所有的可连通区域路径,再从所有的可连通区域路径中筛选出距离最短的可连通区域路径作为最近区域路径。此时,步骤104具体可以包括如下步骤1041~步骤1043,其中:

1041、基于所述连通信息,获取由所述起始区域至所述终止区域之间的各连通区域路径。

其中,每个所述连通区域路径中的各途径区域均不同。每个连通区域路径中的各途径区域均不同是指每个连通区域路径中的各途径区域不存在重复,例如,一个连通区域路径中的各途径区域可以是:路径1->路径2->路径3;但是,一个连通区域路径中的各途径区域不可以是:路径1->路径2->路径3->路径2->路径4。

其中,连通区域路径是指由起始区域至终止区域所经过的所有预设区域所构成的路径,其中,连通区域路径所经过的任意相邻两预设区域之间互相连通。

1042、基于所述区域距离,获取每个所述连通区域路径的区域路径距离。

其中,每个连通区域路径的区域路径距离是指连通区域路径中任意相邻两预设区域间的区域距离的累计值。

在一些实施例中,步骤1042中可以将每个连通区域路径中任意相邻两预设区域间的区域距离进行累加所得到的值作为该连通区域路径的区域路径距离。

例如,如图5所示,假设图5中“区域A->区域B->区域C”为由起始区域至终止区域之间的一个连通区域路径,则可以确定该连通区域路径“区域A->区域B->区域C”的区域路径距离为:区域A与区域B间的区域距离(如图5中S

在一些实施例中,为了提高区域路径距离的确定速度,以提高最近区域路径的确定速度,将目标地图各预设区域中任意两个连通区域间的区域距离设置为相等。以便于在确定区域路径距离只需进行简单连通区域路径的途径区域数统计,无需进行大量的区域距离数据累加计算,从而提高最近区域路径的确定速度,进而提高整个寻路过程的寻路速度,有效提高游戏流畅性。此时,步骤1042可以具体包括:获取每个所述连通区域路径的途径区域数;若所述各预设区域中任意两个连通区域间的所述区域距离均相等,则将每个所述连通区域路径的途径区域数作为每个所述连通区域路径的区域路径距离。

其中,每个连通区域路径的途径区域数是指该连通区域路径所经过的预设区域的数量。

1043、从各所述连通区域路径中获取所述区域路径距离最短的目标连通区域路径,以作为所述最近区域路径。

其中,目标连通区域路径是指各连通区域路径中,区域路径距离最短的连通区域路径。

例如,由起始区域至终止区域之间的各连通区域路径包括区域路径1、2、3,区域路径1、2、3对应的区域路径距离分别为100米、200米、500米。则可以确定区域路径距离最短(即100米)的目标连通区域路径(即区域路径1)作为最近区域路径。

由此可见,通过基于目标地图中每两个预设区域间的连通信息,获取由起始区域至终止区域之间的各连通区域路径;计算每个连通区域路径的区域路径距离;再从中筛选出连通区域路径的区域路径距离最短的目标连通区域路径,作为最近区域路径;可以有效、快速地从目标地图的各预设区域中筛选出起始区域和终止区域之间的最近区域路径,便于后续确定起始路点和终止路点之间的最近路点路径的路点搜索空间,进而有效地降低进行最近路点路径寻路时的路点搜索空间。

二、基于A*算法进行最近区域路径寻路,从目标地图的各预设区域中查找出最近区域路径。此时,步骤104具体可以包括:通过A*算法,基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径。

为了便于理解,下面以区域搜索空间是目标地图的各预设区域(即A*算法的输入是目标地图的各预设区域)为例,介绍基于A*算法获取起始区域和终止区域之间的最近区域路径的原理。

1)设定列表;列表open list、列表came_from和列表came_from。把起始区域加入列表open list,记录起始区域到达起始区域的代价是0,起始区域的前一区域节点为空,执行2)。其中,所有区域节点的代价记录在列表cost_so_far内,列表came_from初始值设置为空,所有区域节点的前一区域节点记录在列表came_from内。

2)遍历open list,找出其中离终止区域距离最近的区域节点,作为输入区域节点执行3);如果open list中没有区域节点了,执行4)。

3)遍历输入区域节点的所有一次可达的区域节点(邻居区域节点)。

如果这个邻居区域节点不在open list内,把这个邻居区域节点加入open list,并且记录到达它所需的代价为:到达输入区域节点的代价+输入区域节点与邻居区域节点的代价(距离),邻居区域节点的前一区域节点为输入区域节点。

如果这个邻居区域节点已经在open list内,拿到到达此邻居区域节点的代价cur_distance、到达输入区域节点的代价为iput_distance、输入区域节点和邻居区域节点之间的距离distance,那么若cur_distance>iput_distance+distance,就把输入区域节点的代价更新为put_distance+distance,并且更新邻居区域节点的前一区域节点为输入区域节点。若cur_distance<=iput_distance+distance,那么不用更新任何数据。

遍历完所有邻居路点后,继续执行2)。

4)从起始区域开始,所有能到达的区域节点的最短路径都已经统计出来了。从cost_so_far和came_from中开始求最短路径。

假如终止区域不在came_from中出现,说明起始区域不能到达终止区域,结束。

假如终止区域在came_from中,那么找到它的前一区域节点。在前一区域节点中,找到它的前一区域节点,重复此过程,直到找到起始区域。在这个从终止区域找起始区域的过程中,所遍历过的区域节点,就是从起始区域到终止区域之间的最近区域路径,结束。

由于A*算法是一种在图形平面上,有多个节点的路径时求出最低通过成本的算法。A*算法是一种启发式搜索算法,可以用来找到起点到终点之间的最短路径。因此,通过A*算法,可以高效、快速地查找到起始区域到终止区域之间的最近区域路径。

进一步地,为了提高通过A*算法进行最近区域路径寻路时的速度,也可以设置各预设区域中任意两个连通区域间的区域距离均相等。

105、基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。

其中,最近区域路径的各途径区域是指目标地图的各预设区域中,最近区域路径所经过的各预设区域。

其中,路点路径是指由多个路点构成的路径。

其中,最近路点路径是指最近区域路径的各途径区域内路点中,由起始路点至终止路点之间最短的、且所经过的相邻两路点均是连通的路点路径。

示例性地,可以通过A*算法求得起始路点和终止路点之间的最近路点路径,此时,步骤105具体可以包括:通过A*算法,基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。

示例性地,步骤“通过A*算法,基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径”具体可以包括:获取最近区域路径的各途径区域内各路点之间的连通距离;基于A*算法以距离代价,根据最近区域路径的各途径区域内各路点之间的连通距离,获取起始路点和终止路点之间的最近路点路径。其中,连通距离是指两个连通路点之间的距离。

由于A*算法是一种在图形平面上,有多个节点的路径时求出最低通过成本的算法。A*算法是一种启发式搜索算法,可以用来找到起点到终点之间的最短路径。因此,通过A*算法,可以高效、快速地查找到起始路点到终止路点之间的最近路点路径。

进一步地,为了提高最近路点路径的确定速度,在确定起始区域和终止区域之后、步骤104“基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径”之前,还可以进一步检测起始区域和终止区域是否相同,即判定目标对象的起始路点和终止路点是否处于同一预设区域内。若目标对象的起始路点和终止路点处于同一预设区域内,则可以直接基于起始路点和终止路点所处于的预设区域内各路点进行寻路,而无需执行步骤102~104。若目标对象的起始路点和终止路点处于不同预设区域内,则再执行步骤102~105来实现最近路点路径的寻路。

此时,即步骤104之前还可以进一步包括:检测所述起始区域与所述终止区域是否相同。步骤104具体可以包括:当所述起始区域与所述终止区域不同时,基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径。该地图寻路方法还可以进一步包括:当所述起始区域与所述终止区域相同时,基于所述起始区域内各路点或所述终止区域内各路点,获取所述起始路点和所述终止路点之间的最近路点路径。

示例性地,步骤“基于所述起始区域内各路点或所述终止区域内各路点,获取所述起始路点和所述终止路点之间的最近路点路径”具体可以包括:获取起始区域或终止区域内各路点之间的连通距离;基于A*算法以距离代价,根据起始区域内各路点之间的连通距离,获取起始路点和终止路点之间的最近路点路径。

为了便于理解,下面以路点搜索空间是最近区域路径的各途径区域内路点(即A*算法的输入是最近区域路径的各途径区域内所有路点)为例,介绍基于A*算法获取起始路点和终止路点之间的最近路点路径的原理。

1)设定列表;列表open list、列表came_from和列表came_from。把起始路点加入列表open list,记录起始路点到达起始路点的代价是0,起始路点的前一路点节点为空,执行2)。其中,所有路点节点的代价记录在列表cost_so_far内,列表came_from初始值设置为空,所有路点节点的前一路点节点记录在列表came_from内。

2)遍历open list,找出其中离终止路点距离最近的路点节点,作为输入路点节点执行3);如果open list中没有路点节点了,执行4)。

3)遍历输入路点节点的所有一次可达的路点节点(邻居路点节点)。

如果这个邻居路点节点不在open list内,把这个邻居路点节点加入open list,并且记录到达它所需的代价为:到达输入路点节点的代价+输入路点节点与邻居路点节点的代价(距离),邻居路点节点的前一路点节点为输入路点节点。

如果这个邻居路点节点已经在open list内,拿到到达此邻居路点节点的代价cur_distance、到达输入路点节点的代价为iput_distance、输入路点节点和邻居路点节点之间的距离distance,那么若cur_distance>iput_distance+distance,就把输入路点节点的代价更新为put_distance+distance,并且更新邻居路点节点的前一路点节点为输入路点节点。若cur_distance<=iput_distance+distance,那么不用更新任何数据。

遍历完所有邻居路点后,继续执行2)。

4)从起始路点开始,所有能到达的路点节点的最短路径都已经统计出来了。从cost_so_far和came_from中开始求最短路径。

假如终止路点不在came_from中出现,说明起始路点不能到达终止路点,结束。

假如终止路点在came_from中,那么找到它的前一路点节点。在前一路点节点中,找到它的前一路点节点,重复此过程,直到找到起始路点。在这个从终止路点找起始路点的过程中,所遍历过的路点节点,就是从起始路点到终止路点之间的最近路点路径,结束。

通过确定目标对象的起始路点和终止路点之间的最近路点路径,可以帮助玩家找出一条移动到非玩家角色的最短路径。进一步地,在确定目标对象的起始路点和终止路点之间的最近路点路径之后,还可以主动控制所述目标对象由所述起始路点沿所述最近路点路径移动至所述终止路点,以便目标对象可以快速地移动到非玩家角色的位置,从而提高游戏的流畅性。

请参照图6,下面以基于A*算法进行最近区域路径寻路、基于A*算法进行最近路点路径寻路为例,说明本申请实施例中的地图寻路过程。如图6所示,地图寻路过程可以如下:

b1、从目标地图的各预设区域中,获取目标对象的起始路点所在的起始区域,以及目标对象的终止路点所在的终止区域。

b2、检测起始区域与终止区域是否相等。若相等,则跳转至b4。若不相等,则跳转至b3。

b3、通过A*算法,基于目标地图中每两个预设区域间的连通信息和目标地图中每两个连通区域间的区域距离进行寻路,获取得到起始区域和终止区域之间的最近区域路径。然后,执行步骤b5。

b4、直接将起始区域作为起始区域和终止区域之间的最近区域路径,即最近区域路径中只有起始区域。然后,执行步骤b5。

b5、获取最近区域路径的各途径区域内所有路点,执行步骤b6。

b6、将最近区域路径的各途径区域内所有路点作为A*算法的输入,通过A*算法进行寻路,获取得到起始路点和终止路点之间的最近路点路径。

步骤b1~b6的各部分详细实现在前文中有相关的详细介绍,具体可以参照前文中的相关说明,此处不再赘述。

由以上内容可以看出,本申请实施例中,通过对目标地图划分为多个预设区域;获取目标地图中每两个预设区域间的连通信息、每两个连通区域间的区域距离,进行区域寻路得到起始区域和终止区域之间的最近区域路径;再基于最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径;第一方面,通过先进行区域寻路得到最近区域路径,再基于最近区域路径的各途径区域内路点进行路点寻路,由于只基于最近区域路径各区域内的路点进行路点寻路,无需针对整个目标地图进行路点寻路,可以极大地降低进行路点寻路时的路点搜索空间,从而可以降低寻路时的数据处理量,缩短了寻路消耗的时间、提高了寻路速度,进而提高游戏的流畅性。第二方面,由于只需获取目标地图中每两个连通区域间的区域距离进行处理,无需针对所有预设区域间计算两个预设区域间的区域距离,避免了获取不连通两预设区域间的区域距离导致无效数据处理;因而可以在满足寻路所需数据的基础上,降低区域距离的数据计算量,也在一定程度上可以降低寻路时的数据处理量,从而提高了寻路速度,进而提高游戏的流畅性。

为了更好地实施以上方法,本发明实施例还提供一种地图寻路装置,该地图寻路装置具体可以集成在电子设备中,比如,计算机设备,该计算机设备可以为终端、服务器等设备。

其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。

比如,在本实施例中,将以地图寻路装置具体集成在智能手机为例,对本发明实施例的方法进行详细说明。

例如,如图7所示,该地图寻路装置可以包括:

第一获取单元701,用于从目标地图的各预设区域中,获取目标对象的起始路点所在的起始区域,以及所述目标对象的终止路点所在的终止区域;

第二获取单元702,用于获取所述目标地图中每两个预设区域间的连通信息;

所述第二获取单元702,还用于获取所述目标地图中每两个连通区域间的区域距离;

区域寻路单元703,用于基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径;

路点寻路单元704,用于基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。

在一些实施例中,所述区域寻路单元703具体用于:

基于所述连通信息,获取由所述起始区域至所述终止区域之间的各连通区域路径,每个所述连通区域路径中的各途径区域均不同;

基于所述区域距离,获取每个所述连通区域路径的区域路径距离;

从各所述连通区域路径中获取所述区域路径距离最短的目标连通区域路径,以作为所述最近区域路径。

在一些实施例中,所述区域寻路单元703具体用于:

获取每个所述连通区域路径的途径区域数;

若所述各预设区域中任意两个连通区域间的所述区域距离均相等,则将每个所述连通区域路径的途径区域数作为每个所述连通区域路径的区域路径距离。

在一些实施例中,所述两个连通区域包括第一预设区域和第二预设区域,所述第二获取单元702具体用于:

确定所述第一预设区域内所有路点的最小包围矩形的第一中心点;

确定所述第二预设区域内所有路点的最小包围矩形的第二中心点;

获取所述第一中心点和所述第二中心点之间的距离,以作为所述区域距离。

在一些实施例中,所述连通信息包括所述目标地图中的第三预设区域和第四预设区域间是否连通,所述第二获取单元702具体用于:

检测所述第三预设区域各路点中是否存在与所述第四预设区域各路点中的至少一个路点连通的目标路点;

若所述第三预设区域中存在所述目标路点,则确定所述第三预设区域和所述第四预设区域连通;

若所述第三预设区域中不存在所述目标路点,则确定所述第三预设区域和所述第四预设区域不连通。

在一些实施例中,所述区域寻路单元703具体用于:

当所述起始区域与所述终止区域不同时,基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径;

在一些实施例中,所述路点寻路单元704具体用于:

当所述起始区域与所述终止区域相同时,基于所述起始区域内各路点或所述终止区域内各路点,获取所述起始路点和所述终止路点之间的最近路点路径。

在一些实施例中,所述各预设区域中任意两个连通区域间的区域距离均相等,所述区域寻路单元703具体用于:

通过A*算法,基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径。

在一些实施例中,所述路点寻路单元704具体用于:

通过A*算法,基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。

在一些实施例中,所述地图寻路装置还包括移动单元(图中未示出),所述移动单元具体用于:

控制所述目标对象由所述起始路点沿所述最近路点路径移动至所述终止路点。

由上可知,本实施例的地图寻路装置可以由第一获取单元701从目标地图的各预设区域中,获取目标对象的起始路点所在的起始区域,以及所述目标对象的终止路点所在的终止区域;由第二获取单元702获取所述目标地图中每两个预设区域间的连通信息;由所述第二获取单元702获取所述目标地图中每两个连通区域间的区域距离;由区域寻路单元703基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径;由路点寻路单元704基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。由此,本发明实施例第一方面,通过先进行区域寻路得到最近区域路径,再基于最近区域路径的各途径区域内路点进行路点寻路,由于只基于最近区域路径各区域内的路点进行路点寻路,无需针对整个目标地图进行路点寻路,可以极大地降低进行路点寻路时的路点搜索空间,从而可以降低寻路时的数据处理量,缩短了寻路消耗的时间、提高了寻路速度,进而提高游戏的流畅性。第二方面,由于只需获取目标地图中每两个连通区域间的区域距离进行处理,无需针对所有预设区域间计算两个预设区域间的区域距离,避免了获取不连通两预设区域间的区域距离导致无效数据处理;因而可以在满足寻路所需数据的基础上,降低区域距离的数据计算量,也在一定程度上可以降低寻路时的数据处理量,从而提高了寻路速度,进而提高游戏的流畅性。

相应的,本申请实施例还提供一种计算机设备,该计算机设备可以为终端,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机(PC,PersonalComputer)、个人数字助理(Personal Digital Assistant,PDA)等终端设备。如图8所示,图8为本申请实施例提供的计算机设备的结构示意图。该计算机设备800包括有一个或者一个以上处理核心的处理器801、有一个或一个以上计算机可读存储介质的存储器802及存储在存储器802上并可在处理器上运行的计算机程序。其中,处理器801与存储器802电性连接。本领域技术人员可以理解,图中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

处理器801是计算机设备800的控制中心,利用各种接口和线路连接整个计算机设备800的各个部分,通过运行或加载存储在存储器802内的软件程序和/或模块,以及调用存储在存储器802内的数据,执行计算机设备800的各种功能和处理数据,从而对计算机设备800进行整体监控。

在本申请实施例中,计算机设备800中的处理器801会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器802中,并由处理器801来运行存储在存储器802中的应用程序,从而实现各种功能:

从目标地图的各预设区域中,获取目标对象的起始路点所在的起始区域,以及所述目标对象的终止路点所在的终止区域;

获取所述目标地图中每两个预设区域间的连通信息;

获取所述目标地图中每两个连通区域间的区域距离;

基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径;

基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

可选的,如图8所示,计算机设备800还包括:触控显示屏803、射频电路804、音频电路805、输入单元806以及电源807。其中,处理器801分别与触控显示屏803、射频电路804、音频电路805、输入单元806以及电源807电性连接。本领域技术人员可以理解,图8中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

触控显示屏803可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏803可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-EmittingDiode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器801,并能接收处理器801发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器801以确定触摸事件的类型,随后处理器801根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏803而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏803也可以作为输入单元806的一部分实现输入功能。

射频电路804可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。

音频电路805可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路805可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路805接收后转换为音频数据,再将音频数据输出处理器801处理后,经射频电路804以发送给比如另一计算机设备,或者将音频数据输出至存储器802以便进一步处理。音频电路805还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。

输入单元806可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

电源807用于给计算机设备800的各个部件供电。可选的,电源807可以通过电源管理系统与处理器801逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源807还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

尽管图8中未示出,计算机设备800还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

由上可知,本实施例提供的计算机设备,可以从目标地图的各预设区域中,获取目标对象的起始路点所在的起始区域,以及目标对象的终止路点所在的终止区域;获取目标地图中每两个预设区域间的连通信息;获取目标地图中每两个连通区域间的区域距离;基于连通信息和区域距离,获取起始区域和终止区域之间的最近区域路径;基于最近区域路径的各途径区域内路点,获取起始路点和终止路点之间的最近路点路径,因此本实施例提供的计算机设备:第一方面,通过先进行区域寻路得到最近区域路径,再基于最近区域路径的各途径区域内路点进行路点寻路,由于只基于最近区域路径各区域内的路点进行路点寻路,无需针对整个目标地图进行路点寻路,可以极大地降低进行路点寻路时的路点搜索空间,从而可以降低寻路时的数据处理量,缩短了寻路消耗的时间、提高了寻路速度,进而提高游戏的流畅性。第二方面,由于只需获取目标地图中每两个连通区域间的区域距离进行处理,无需针对所有预设区域间计算两个预设区域间的区域距离,避免了获取不连通两预设区域间的区域距离导致无效数据处理;因而可以在满足寻路所需数据的基础上,降低区域距离的数据计算量,也在一定程度上可以降低寻路时的数据处理量,从而提高了寻路速度,进而提高游戏的流畅性。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种地图寻路方法中的步骤。例如,该计算机程序可以执行如下步骤:

从目标地图的各预设区域中,获取目标对象的起始路点所在的起始区域,以及所述目标对象的终止路点所在的终止区域;

获取所述目标地图中每两个预设区域间的连通信息;

获取所述目标地图中每两个连通区域间的区域距离;

基于所述连通信息和所述区域距离,获取所述起始区域和所述终止区域之间的最近区域路径;

基于所述最近区域路径的各途径区域内路点,获取所述起始路点和所述终止路点之间的最近路点路径。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。

由于该计算机可读存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种地图寻路方法中的步骤,因此,可以实现本申请实施例所提供的任一种地图寻路方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

以上对本申请实施例所提供的一种地图寻路方法、装置、计算机可读存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

相关技术
  • 地图寻路方法、装置、终端和存储介质
  • 地图中寻路的方法、装置、计算机设备和存储介质
技术分类

06120113830716