基于游戏场景的寻路方法及装置、设备、介质与流程

文档序号:24625993发布日期:2021-04-09 20:33阅读:134来源:国知局
基于游戏场景的寻路方法及装置、设备、介质与流程

本发明涉及图像技术领域,尤其涉及一种基于游戏场景的寻路方法及装置、设备、介质。



背景技术:

目前,在游戏地图中会设置多个固定的传送点,便于游戏角色通过传送点移动至地图中的特定位置(即目标位置)。

搜索传送点时,通常会采用a*寻路算法遍历传送点,并计算每一传送点与目标位置之间的寻路路径以及对应的路径长度,从而,以寻路路径最短的传送点作为移动过程中需要使用的目标传送点。由于游戏角色所处位置实时变化,每次移动都需要重新搜索传送点,容易导致游戏性能降低。

综上,如何搜索距离目标位置最近的传送点,成为亟待解决的技术问题。



技术实现要素:

本发明实施例提供一种基于游戏场景的寻路方法及装置、设备、介质,用以简化传送点的搜索方式,提升传送点搜索效率。

第一方面,本发明实施例提供一种基于游戏场景的寻路方法,应用程序加载有场景地图和传送信息表,场景地图包括多个场景区域,以场景区域为单位在传送信息表中存储有多个场景区域各自对应的传送点信息;该方法包括:

响应于对应用程序发出的寻路指令,从寻路指令中获取目标位置,并确定目标位置所处的目标场景区域;

从传送信息表中获取与目标场景区域对应的传送点信息;

基于与目标场景区域对应的传送点信息,执行与寻路指令对应的动作逻辑。

在一种可能的实施例中,传送信息表中任一场景区域对应的传送点信息包括距离当前场景区域最近的最近传送点、以及最近传送点与当前场景区域的距离。

基于与目标场景区域对应的传送点信息,执行与寻路指令对应的动作逻辑,包括:确定与寻路指令对应的位移对象;基于最近传送点以及最近传送点与目标场景区域的距离,将位移对象从当前位置移动至最近传送点。

在一种可能的实施例中,多个场景区域为多个网格,多个网格包括多个传送点各自所处的传送点网格。

方法还包括:将各个传送点网格对应的传送点信息存储至传送信息表;围绕各个传送点网格逐层遍历多个网格,以判断多个网格中各个网格与传送点网格之间的连通关系;基于连通关系获取各个网格对应的传送点信息,并将各个网格对应的传送点信息存储至传送信息表。

在一种可能的实施例中,多个网格还包括与各个传送点网格邻接的多个第一层网格。围绕各个传送点网格逐层遍历多个网格,以判断多个网格中各个网格与传送点网格之间的连通关系,包括:

将各个传送点网格添加至搜索队列;从搜索队列中获取任一个传送点网格j,遍历与传送点网格j邻接的多个第一层网格,以判断传送点网格j与邻接的多个第一层网格之间的连通关系;若判定传送点网格j与第一层网格k之间连通,则将第一层网格k添加至搜索队列中,其中第一层网格k为与传送点网格j邻接的多个第一网格中的任一个;以搜索队列中的第一层网格为中心,对围绕第一层网格的下一层网格进行遍历,以判断下一层网格与各个传送点网格之间的连通关系。

在一种可能的实施例中,遍历与传送点网格j邻接的多个第一层网格,以判断传送点网格j与邻接的多个第一层网格之间的连通关系,包括:

以当前遍历到的第一层网格m的位置信息作为第一位置信息;判断是否存在与第一位置信息对应的第一寻路信息;若判定存在第一寻路信息,则获取第一寻路信息以及与第二位置信息对应的第二寻路信息,第二位置信息为传送点网格j的位置信息;基于第一寻路信息和第二寻路信息,判断传送点网格j与第一层网格m之间是否连通。

在一种可能的实施例中,第一寻路信息为包含第一位置信息的第一多边形网格信息,第二寻路信息为包含第二位置信息的第二多边形网格信息。

基于第一寻路信息和第二寻路信息,判断传送点网格j与第一层网格m之间是否连通,包括:判断第一多边形网格信息与第二多边形网格信息之间是否阻塞;若判定第一多边形网格信息与第二多边形网格信息之间不阻塞,则确定传送点网格j与第一层网格m之间连通。

在一种可能的实施例中,判定第一多边形网格信息与第二多边形网格信息之间不阻塞的情况包括以下之一:第一多边形网格信息与第二多边形网格信息之间存在共边;第一多边形网格信息与第二多边形网格信息为相同的共边多边形。

在一种可能的实施例中,传送点网格j为多个传送点网格中的任一个,第一层网格k为与传送点网格j邻接的多个第一网格中的任一个。

基于连通关系获取各个网格对应的传送点信息,并将各个网格对应的传送点信息存储至传送信息表,包括:若传送点网格j与邻接的第一层网格k之间连通,则获取第一层网格k与传送点网格j之间的距离作为第一距离;并以第一距离和传送点网格j作为第一层网格k的传送点信息存储至传送信息表。

在一种可能的实施例中,寻路方法还包括:若传送信息表中存储有第一层网格k的传送点信息,则判断第一距离是否小于第一层网格k的传送点信息中的第二距离;若第一距离小于第二距离,则将第一距离和传送点网格j存储至传送信息表中,以更新传送信息表。

第二方面,本发明实施例提供一种基于游戏场景的寻路装置,该寻路装置应用于加载有场景地图和传送信息表的应用程序,场景地图包括多个场景区域,以场景区域为单位在传送信息表中存储有多个场景区域各自对应的传送点信息;该寻路装置包括:

网格获取模块,用于响应于对应用程序发出的寻路指令,从寻路指令中获取目标位置,并确定目标位置所处的目标场景区域;

信息获取模块,用于从传送信息表中获取与目标场景区域对应的传送点信息;

逻辑执行模块,用于基于与目标场景区域对应的传送点信息,执行与寻路指令对应的动作逻辑。

本发明实施例又提供了一种系统,包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由所述处理器加载并执行以实现上面描述的基于游戏场景的寻路方法。

本发明实施例提供了一种计算机可读介质,其上存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上面描述的基于游戏场景的寻路方法。

在本发明实施例中,应用程序加载有场景地图和传送信息表,场景地图包括多个场景区域,以场景区域为单位在传送信息表中存储有多个场景区域各自对应的传送点信息,这样便于以场景区域为单位在传送信息表中搜索传送点。在此基础上,响应于对应用程序发出的寻路指令,从寻路指令中获取目标位置,由于目标位置通常不位于传送点,因此需要确定目标位置所处的目标场景区域。进而,从存储有多个场景区域各自对应的传送点信息的传送信息表中,直接获取与目标场景区域对应的传送点信息,无需寻路数据也无需采用寻路算法遍历各个传送点即可实现传送点搜索,避免每次寻路过程产生的大量计算,大大提升传送点搜索效率。最终,基于直接获取的与目标场景区域对应的传送点信息,执行与寻路指令对应的动作逻辑,实现了基于传送点信息的寻路过程。并且,由于传送点信息可通过目标场景区域从传送信息表中直接搜索得到的,因此,能够有效避免因传送点数量增加而带来的传送点搜索复杂度急剧上升的问题,使得游戏场景地图中的传送点配置数量不受限制,传送点配置更为灵活。

附图说明

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

图1为本发明一实施例提供的一种基于游戏场景的寻路方法的流程示意图;

图2为本发明一实施例提供的一种寻路过程的原理示意图;

图3为本发明一实施例提供的另一种寻路过程的原理示意图;

图4为本发明一实施例提供的再一种寻路过程的原理示意图;

图5为本发明实施例提供的一种基于游戏场景的寻路装置的结构示意图;

图6为与图5所示实施例提供的基于游戏场景的寻路装置对应的电子设备的结构示意图。

具体实施方式

现在将参照若干示例性实施例来论述本发明的内容。应当理解,论述了这些实施例仅是为了使得本领域普通技术人员能够更好地理解且因此实现本发明的内容,而不是暗示对本发明的范围的任何限制。

如本文中所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”。术语“一个实施例”和“一种实施例”要被解读为“至少一个实施例”。术语“另一个实施例”要被解读为“至少一个其他实施例”。

另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。

本发明实施例提供的寻路方案可以由一电子设备来执行,该电子设备可以是诸如智能手机、平板电脑、pc机、笔记本电脑等终端设备。在一可选实施例中,该电子设备上可以安装有用于执行寻路方案的应用程序。或者,另一可选实施例中,寻路方案也可以由服务端设备和终端设备配合执行。

本发明实施例提供的寻路方案适用于各种传送点搜索场景。各种传送点搜索场景比如是:接收某一任务后切换到游戏地图中的另一位置的切换场景、在大世界游戏中自主移动的场景、道具传送场景。

下面以游戏场景为例,说明本发明实施例提供的技术方案实际要解决的技术问题:

目前,在游戏地图中会设置多个固定的传送点,便于游戏角色通过传送点移动至地图中的特定位置(即目标位置)。实际上,由于传送点时常与目标位置不重合,因此,游戏角色也可以通过传送点移动至目标位置附近。

搜索传送点时,通常会采用a*寻路算法遍历传送点,并计算每一传送点与目标位置之间的寻路路径以及对应的路径长度,从而,以寻路路径最短的传送点作为移动过程中需要使用的目标传送点。由于游戏角色所处位置实时变化,每次移动都需要重新搜索传送点。简单来说,就是每次移动都需要采用寻路算法遍历传送点,以实时计算出各个传送点与目标位置之间的寻路路径长度,从而,选取寻路路径最短的目标传送点。显然,这一传送点搜索方式需要消耗大量的计算资源,容易导致传送点搜索效率降低,导致游戏性能下降。综上,如何搜索距离目标位置最近的传送点,成为亟待解决的技术问题。

另一方面,随着游戏地图更新以及游戏玩法的扩展,传送点数量不断增加,导致传送点搜索复杂度急剧上升,传送点搜索消耗的计算资源也急剧增加,进一步导致游戏性能下降。因而,目前还存在因传送点数量增加而带来的传送点搜索复杂度急剧上升的问题。

针对上述技术问题,在本发明一些实施例中,提供了一种解决方案,以下结合附图,详细说明本发明各实施例提供的技术方案。

下面结合以下实施例对该基于游戏场景的寻路方法的执行过程进行说明。图1为本发明实施例提供的一种基于游戏场景的寻路方法的流程图。如图1所示,该基于游戏场景的寻路方法包括如下步骤:

101、响应于对应用程序发出的寻路指令,从寻路指令中获取目标位置,并确定目标位置所处的目标场景区域;

102、从传送信息表中获取与目标场景区域对应的传送点信息;

103、基于与目标场景区域对应的传送点信息,执行与寻路指令对应的动作逻辑。

本发明实施例中的寻路方法应用于应用程序,该应用程序可以设置于终端设备。该应用程序加载有场景地图和传送信息表。

为便于在传送信息表中存储各个传送点信息,还需要明确各个传送点信息在场景地图中的作用范围,因此,还可设置覆盖场景地图的多个场景区域。场景区域可作为构建传送信息表的最小存储单位,从而,以场景区域为单位在传送信息表中存储有多个场景区域各自对应的传送点信息。可选地,多个场景区域与场景地图中的多个位置坐标范围一一对应。

可选地,为便于描述场景区域对应的位置坐标范围,多个场景区域可实现为多个网格。因此,此处多个网格是为便于在传送信息表中描述传送点信息在场景地图中的作用范围而设置的。以游戏场景为三维场景为例,场景地图可以实现为包含碰撞信息的三维场景地图。多个网格例如是覆盖场景地图中各个场景区域的多个二维网格。在此基础上,以网格为最小存储单位在传送信息表中存储有多个网格各自对应的传送点信息,以便基于网格坐标在传送信息表中查询对应的传送点信息。

以游戏地图为例,多个网格的形状可以设置为相同大小的正方形。或者,多个网格的形状也可以依据场景地图的具体地形设置为不规则的多边形。无论采用何种形式,多个网格都需覆盖游戏地图中可以移动到的任一位置,以保证传送点信息的准确性。

101中,响应于对应用程序发出的寻路指令,从寻路指令中获取目标位置,并确定目标位置所处的目标场景区域。

在一些实施例中,该寻路指令可以是游戏玩家触发的。例如,在一些场景下,当游戏玩家在游戏过程中,需要将寻路指令对应的移动对象(如游戏角色或某一物品移动)到目标位置时,可通过游戏界面提供的控制按钮发出该寻路指令。该寻路指令可以实现为移动指令、攻击指令、物品传送指令等等,本实施例不做限制。

在另一些实施例中,该寻路指令可以是游戏系统根据检测到的事件自动触发的。该自动触发寻路指令的事件,可以是计时事件、计数事件或者其他监听事件,本实施例不做限制。若为计时事件,则游戏系统可根据定时任务触发的寻路指令。例如,游戏场景中,某一游戏角色进入当前场景指定时长后,可由系统自动触发移动指令,将该游戏角色从当前场景移动至另一场景。若为计数事件,则游戏系统可根据某一计数任务触发的寻路指令。例如,游戏场景中,游戏角色收集某一物品达到数量阈值时,可由系统自动触发跳转指令,将该游戏角色移动至目标场景。不再一一进行列举。

检测到该寻路指令后,可从该寻路指令中解析出目标位置。该目标位置比如是目标位置的坐标信息。进而,可确定目标位置所处的目标场景区域,并将目标位置的坐标信息转换为目标场景区域的标识。以目标场景区域为目标网格为例,目标网格的标识比如是网格标识、网格索引、网格坐标。

例如,假设应用程序为游戏客户端,寻路指令为向城堡p的移动指令。基于此,可从寻路指令中解析出目标位置为城堡p,并获取该城堡p的位置坐标。由于该城堡p不属于传送点,因此,为搜索出距离该城堡p最近的传送点,以该城堡p所处网格作为目标网格,并将该城堡p的位置坐标转换为该城堡p所处网格的网格坐标。

进而,确定目标位置所处的目标场景区域后,102中,从传送信息表中获取与目标场景区域对应的传送点信息。其中,传送信息表中存储有多个场景区域各自对应的传送点信息。具体地,传送信息表中各个场景区域对应的传送点信息包括但不限于:距离当前场景区域最近的最近传送点(例如最近传送点的标识)、以及最近传送点与当前场景区域的距离。

继续假设应用程序为游戏客户端,并且假设寻路指令为向城堡p的移动指令。基于此,确定城堡p所处网格作为目标场景区域之后,通过城堡p所处场景区域的场景区域坐标,从传送信息表中获取与该城堡p所处场景区域对应的传送点信息,比如距离该城堡p所处场景区域最近的传送点的标识。

实际应用中,为便于构建传送信息表,假设基于场景地图得到覆盖该场景地图的m*n个网格,其中,网格的长、宽为单位长度,m为场景地图的长,n为场景地图的宽。基于此,以网格为最小计算单位,将覆盖场景地图的m*n个网格各自对应的传送点信息以结构体数据的形式分别存储至传送信息表中。其中,结构体数据例如是struct结构体数据。

以struct结构体数据为例,m*n个网格各自对应的传送点信息可以存储于如下结构体:structdstruct{intdis;intid},其中,struct为结构体标记,dstruct为结构体名称,dis为最近传送点与当前场景区域的距离,id为距离当前场景区域最近的最近传送点的标识,int为数据类型即整型。基于此,传送信息表dmap中包括m*n个网格各自对应的数据块,即dstruct[m,n]dmap,其中,[m,n]为网格坐标。

最终,获取与目标场景区域对应的传送点信息之后,103中,基于与目标场景区域对应的传送点信息,执行与寻路指令对应的动作逻辑。

其中,动作逻辑可以实现为位置移动逻辑、传送逻辑等等,本实施例不做限制。

假设传送信息表中各个场景区域对应的传送点信息包括:距离当前场景区域最近的最近传送点的标识、以及最近传送点与当前场景区域的距离。

基于此,103中,基于与目标场景区域对应的传送点信息,执行与寻路指令对应的动作逻辑的一可选实现方式为:

确定与寻路指令对应的位移对象;基于最近传送点、以及最近传送点与目标场景区域的距离,将位移对象从当前位置移动至最近传送点。从而,使位移对象通过最近传送点移动至目标位置。

例如,继续假设应用程序为游戏客户端,寻路指令为向城堡p的移动指令。假设城堡p并不位于传送点上。假设该城堡p所处场景区域(即目标场景区域)对应的传送点信息包括:距离该城堡p所处场景区域最近的最近传送点标识、以及最近传送点与城堡p所处场景区域的距离。

基于此,首先确定与移动指令对应的位移对象,假设该移动指令对应的位移对象为玩家控制的游戏角色。进而,根据最近传送点的标识以及最近传送点与城堡p所处场景区域的距离,将玩家控制的游戏角色从当前位置移动至标识对应的最近传送点,使该游戏角色位移至与城堡p距离最近的传送点。从而,玩家可控制该游戏角色从最近传送点移动至城堡p,完成该移动指令对应的位置移动逻辑。

其中,将位移对象从当前位置移动至最近传送点,可以理解为,将位移对象所处的场景从当前位置所处场景切换至最近传送点所处的另一场景。两个场景中比如包括配合不同剧情设定的景物、不同风格的场景色调、不同npc,以便使用户从两个场景的视觉效果中感知到位移对象从当前位置移动至最近传送点。

上述步骤101至步骤103中,通过从存储有多个场景区域各自对应的传送点信息的传送信息表中,直接获取与目标场景区域对应的传送点信息,无需寻路数据也无需采用寻路算法遍历各个传送点即可实现传送点搜索,避免每次寻路过程产生的大量计算,大大提升传送点搜索效率。

另一方面,针对目前存在的因传送点数量增加而带来的传送点搜索复杂度急剧上升的问题,在本发明实施例中,通过从存储有多个场景区域各自对应的传送点信息的传送信息表中,直接获取与目标场景区域对应的传送点信息,无需寻路数据也无需采用寻路算法遍历各个传送点,即可直接通过传送信息表实现传送点搜索,因而,能够避免因传送点数量增加而导致的每次寻路过程中传送点搜索复杂度急剧上升的问题,大大减少传送点搜索消耗的计算资源,提升传送点搜索效率,不仅使得游戏场景地图中的传送点配置数量不受限制,传送点配置更为灵活,还有助于进一步保证游戏性能。

在本发明的上述以及下述各实施例中,可选地,可以预先建立与场景地图对应的传送信息表。可选地,传送信息表可以是由终端设备搭载的应用程序周期性维护的,也可以是由服务端设备进行维护,并更新至终端设备搭载的应用程序中。例如,假设终端设备为手机,假设应用程序为手机中安装的游戏客户端,传送信息表以文件形式存储于游戏客户端中。实际上,可通过预设代码接口直接访问传送信息表中的结构体数据。

具体地,假设服务端设备为游戏服务器,传送信息表可以由游戏服务器基于游戏地图的更新信息进行更新维护,并将维护后的传送信息表传输至游戏客户端侧。例如,随着游戏地图更新以及游戏玩法的扩展,在传送信息表中增加传送点以及相应的传送点信息。

实际上,在一些类型的游戏中,游戏玩家可以自定义设置传送点,此情况下,游戏客户端可以将自定义设置的传送点信息传输至游戏服务器,并由游戏服务器实时更新至传送信息表中,分发给处于同一游戏地图中的各个游戏客户端。

在一些实施例中,假设场景地图包括多个场景区域。假设多个场景区域为多个网格。与上文描述类似,此处多个网格实际上是为便于在传送信息表中描述传送点信息在场景地图中的作用范围而设置的。假设多个网格中包括:多个传送点各自所处的传送点网格。基于此,图2示出与图1对应的一种传送信息表的生成流程。如图2所示,可通过如下步骤生成传送信息表:

201、将各个传送点网格对应的传送点信息存储至传送信息表;

202、围绕各个传送点网格逐层遍历多个网格,以判断多个网格中各个网格与传送点网格之间的连通关系;

203、基于连通关系获取各个网格对应的传送点信息,并将各个网格对应的传送点信息存储至传送信息表。

假设传送信息表中各个网格对应的传送点信息包括:距离当前网格最近的最近传送点的标识、以及最近传送点与当前网格的距离。

基于上述假设,201中,对于每一传送点网格,在传送信息表中将该传送点网格自身的标识作为最近传送点的标识,并将最近传送点与当前网格的距离设置为0。

进而,202中,围绕各个传送点网格逐层遍历多个网格,以判断多个网格中各个网格与传送点网格之间的连通关系。

假设场景地图划分出的多个网格包括多个传送点网格以及与各个传送点网格邻接的多个第一层网格。假设传送点网格j为多个传送点网格中的任一个。基于上述假设,下面以传送点网格j和围绕传送点网格j邻接的第一层网格为例,说明202中如何围绕各个传送点网格逐层遍历多个网格,以判断多个网格中各个网格与传送点网格之间的连通关系。

具体而言,可以传送点网格j为中心,首先对围绕传送点网格j的第一层网格进行遍历,判断围绕传送点网格j的各个第一层网格与该传送点网格j之间的连通关系。例如,传送点网格j以及围绕传送点网格j并且分布于8个方向上的第一层网格的位置关系如图3所示。

进而,以与传送点网格j连通的第一层网格为中心,对围绕这些第一层网格的第二层网格进行遍历,判断围绕这些第一层网格的第二层网格与传送点网格j之间的连通关系。进一步,以与传送点网格j连通的第二层网格为中心,对围绕这些第二层网格的第三层网格进行遍历,判断围绕这些第二层网格的第三层网格与传送点网格j之间的连通关系。以此类推,直到检测的下一层网格处于场景地图边缘时,此时可以确定已完成对多个网格的遍历操作。

此处,以传送点网格j以及围绕该传送点网格j的第一层网格为例,传送点网格j与某一第一层网格之间连通,即表示两者具有连通关系。简单来说,传送点网格j可以移动至该第一层网格。例如,在游戏中,游戏角色从传送点网格j中可以行走至与其连通的某一第一层网格中。

其中,进一步假设第一层网格k为与传送点网格j邻接的多个第一网格中的任一个。基于此,对于传送点网格j以及与传送点网格j邻接的第一层网格k而言,步骤202可以实现为:

将各个传送点网格添加至搜索队列;从搜索队列中获取任一个传送点网格j,遍历与传送点网格j邻接的多个第一层网格,以判断传送点网格j与邻接的多个第一层网格之间的连通关系;若判定传送点网格j与第一层网格k之间连通,则将第一层网格k添加至搜索队列中;以搜索队列中的第一层网格为中心,对围绕第一层网格的下一层网格进行遍历,以判断下一层网格与各个传送点网格之间的连通关系。

具体而言,若某一网格被添加至搜索队列后,搜索队列中就会保存有该网格对应的索引标识。202中,将各个传送点网格添加至搜索队列,并基于索引标识从搜索队列中逐一获取传送点网格。

以当前获取的传送点网格是传送点网格j为例,首先遍历与该传送点网格j邻接的多个第一层网格,以判断传送点网格j与邻接的多个第一层网格之间的连通关系。可选地,假设传送点网格j为二维网格,此情况下,与该传送点网格j邻接的多个第一层网格可以是:以传送点网格j为中心、分布在8个方向上的第一层网格。

以该传送点网格j邻接的多个第一层网格中的第一层网格k为例,若判定传送点网格j与第一层网格k之间连通,则说明第一层网格k与该传送点网格j之间连通,两者具有连通关系,此情况下,可将该第一层网格k添加至搜索队列中作为遍历下一层网格的基础。也就是说,会以搜索队列中的第一层网格为中心,对围绕第一层网格的下一层网格进行遍历,以判断下一层网格与各个传送点网格之间的连通关系。当然,如果该第一层网格k处于场景边缘,则停止对下一层网格进行遍历操作。

由上述步骤可知,通过判断传送点网格与邻接的多个第一层网格之间的连通关系,可以在搜索队列中添加与传送点网格具有连通关系的第一层网格,剔除掉不具有连通关系的第一层网格。进而,以具有连通关系的第一层网格为基础,对围绕第一层网格的下一层网格进行遍历,以判断下一层网格与各个传送点网格之间的连通关系。这样,能够以传送点网格为中心整体检测场景地图中各个网格间的连通关系。

实际应用中,例如,进一步假设第一层网格m为与传送点网格j邻接的多个第一网格中的任一个。基于此,202中,遍历与传送点网格j邻接的多个第一层网格,以判断传送点网格j与邻接的多个第一层网格之间的连通关系的一种可选实现方式,具体为:

以当前遍历到的第一层网格m的位置信息作为第一位置信息;判断是否存在与第一位置信息对应的第一寻路信息;若判定存在第一寻路信息,则获取第一寻路信息以及与第二位置信息对应的第二寻路信息,第二位置信息为传送点网格j的位置信息;基于第一寻路信息和第二寻路信息,判断传送点网格j与第一层网格m之间是否连通。

上述步骤中,可以通过判断是否存在第一寻路信息来简单判断第一层网格m与传送点网格j是否连通,也就是说,如果不存在第一寻路信息,此情况下,可以直接判定第一层网格m与传送点网格j之间不连通,并继续遍历其他第一层网格。如果存在第一寻路信息,此情况下,可以初步判定第一层网格m与传送点网格j之间可能连通,并通过第一寻路信息和第二寻路信息,进一步判断传送点网格j与第一层网格m之间是否连通。通过上述多种判断连通关系的方式,可以提升连通关系判断效率,进一步提升传送信息的生成效率。

可选地,在以当前遍历到的第一层网格m的位置信息作为第一位置信息之前,还可通过物理射线(physic.raycast)接口获取场景地图中多个网格各自的位置信息。本发明实施例中的位置信息包括高度信息。例如,通过physic.raycast接口,待标注的网格中,从设定高度向下发射射线,以便基于射线反射情况获取该网格的高度信息,并将该网格的高度信息存储于位置信息表(例如hmap)中。其中设定高度大于地图中最高点的高度。结构体数据构建的位置信息表hmap例如是,float[m,n]hmap,其中,float为结构体数据类型,[m,n]为网格坐标,hmap为结构体名称。

具体地,第一寻路信息可以实现为包含第一位置信息的第一多边形网格信息,第二寻路信息可以实现为包含第二位置信息的第二多边形网格信息。这里“第一”、“第二”仅用于区别。实际上,上述两个位置信息均可以通过寻路信息采样(navmesh.sampleposition)接口获取。具体地,navmesh.sampleposition接口主要用于获取某一位置周围的寻路信息。需要向该接口输入的参数包括该位置的位置坐标以及需要采样的范围。通过该接口可以查询到输入的采样范围中是否存在对应的多边形网格(navmesh,也称为寻路网格或导航网格)信息。

基于此,基于第一寻路信息和第二寻路信息,判断传送点网格j与第一层网格m之间是否连通,可以实现为:判断第一多边形网格信息与第二多边形网格信息之间是否阻塞;若判定第一多边形网格信息与第二多边形网格信息之间不阻塞,则确定传送点网格j与第一层网格m之间连通。

此处“阻塞”可以理解为寻路不连通。因此,在一些实施例中,假设通过navmesh.sampleposition接口获取到第一多边形网格信息与第二多边形网格信息。假设第一多边形网格信息与第二多边形网格信息均属于同一navmesh集合。

基于上述假设,向navmesh.raycast接口输入第一多边形网格信息和第二多边形网格信息,通过navmesh.raycast接口基于navmesh集合反馈的阻塞判断结果。进而,基于阻塞判断结果判断传送点网格j与第一层网格m之间是否连通。例如,阻塞判断结果为false是指第一多边形网格信息与第二多边形网格信息之间不存在“寻路阻挡”,即传送点网格j与第一层网格m之间连通。阻塞判断结果为true是指第一多边形网格信息与第二多边形网格信息之间存在“寻路阻挡”,即传送点网格j与第一层网格m之间不连通。

当然,也可以采用寻路连通的情况判断第一多边形网格信息与第二多边形网格信息之间是否阻塞。若出现以下情况之一则判定第一多边形网格信息与第二多边形网格信息之间寻路联通(即不阻塞):第一多边形网格信息与第二多边形网格信息之间存在共边,第一多边形网格信息与第二多边形网格信息为相同的共边多边形。

具体来说,如果第一多边形网格信息与第二多边形网格信息之间存在共边,则说明两个多边形网格直接连接,此情况下,可以判断两个多边形网格连通;如果第一多边形网格信息与第二多边形网格信息为相同的共边多边形,则说明两个多边形网格间接连接,此情况下,也可以判断两个多边形网格连通。

最终,203中,基于连通关系获取各个网格对应的传送点信息,并将各个网格对应的传送点信息存储至传送信息表,可以实现为:

若传送点网格j与邻接的第一层网格k之间连通,则获取第一层网格k与传送点网格j之间的距离作为第一距离;并以第一距离和传送点网格j作为第一层网格k的传送点信息存储至传送信息表。

若检测到传送信息表中已存储有第一层网格k的传送点信息,则判断第一距离是否小于第一层网格k的传送点信息中的第二距离。若判定第一距离小于第二距离,则说明第一距离为第一层网格k与传送点网格之间的最短路径,因而,需要将第一距离和传送点网格j存储至传送信息表中,以更新传送信息表。

在一示例中,可通过如下方式确定第一层网格k与传送点网格j之间的距离,具体为:确定第一层网格k与传送点网格j的位置关系,其中第一层网格k与传送点网格j的位置关系包括横向连通、竖向连通、斜向连通。进而,获取与位置关系匹配的网格距离,并以网格距离作为第一层网格k与传送点网格j之间的距离。

另一示例中,假设第一层网格k与传送点网格j连通。假设第二层网格t邻接于第一层网格k,但不邻接于传送点网格j。假设第二层网格t与传送点网格j连通。第一层网格k、第二层网格t以及传送点网格j的位置关系如图4所示。

基于上述假设,可通过如下方式确定第一层网格k与传送点网格j之间的距离,具体为:确定第一层网格k与第二层网格t的位置关系,其中第一层网格k与第二层网格t的位置关系包括横向连通、竖向连通、斜向连通。

进一步地,假设第二层网格t位于第一层网格k横向(或竖向)时匹配的网格距离是1,假设第二层网格t位于第一层网格k斜向时匹配的网格距离是1.4。

在图4中,第二层网格t位于第一层网格k斜向,则获取与位置关系匹配的网格距离为1.4,并以网格距离和传送信息表中存储的第一层网格k到传送点网格j的距离之和,作为第一层网格k与传送点网格j之间的距离。

通过上述步骤,可以建立并维护传送信息表,从而,保证传送信息表的可靠性。如游戏开发人员或玩家需要添加或删除传送点,通过修改上述步骤中的搜索队列,也可以实现对传送信息表的维护更新,为更灵活的传送点管理方式提供基础。

图1示出的基于游戏场景的寻路方法的执行过程中,将应用程序加载有的场景地图划分为多个网格,便于以网格为单位搜索传送点。在此基础上,响应于对应用程序发出的寻路指令,从寻路指令中获取目标位置,由于目标位置通常不位于传送点,因此还需要确定目标位置所处的目标场景区域。进而,从存储有多个网格各自对应的传送点信息的传送信息表中,直接获取与目标场景区域对应的传送点信息,无需寻路数据也无需采用寻路算法遍历各个传送点即可实现传送点搜索,避免每次寻路过程产生的大量计算,大大提升传送点搜索效率。最终,基于直接获取的与目标场景区域对应的传送点信息,执行与寻路指令对应的动作逻辑,实现了基于传送点信息的寻路过程。

并且,由于传送点信息可通过目标场景区域从传送信息表中直接搜索得到,因此,传送点数量变化对传送点搜索复杂度的影响较小,从而能够有效避免因传送点数量增加而带来的传送点搜索复杂度急剧上升的问题,使得游戏场景地图中的传送点配置数量不受限制,传送点配置更为灵活。

以下将详细描述本发明的一个或多个实施例的寻路装置。本领域技术人员可以理解,这些寻路装置均可使用市售的硬件组件通过本方案所教导的步骤进行配置来构成。

图5为本发明实施例提供的一种基于游戏场景的寻路装置的结构示意图。该寻路装置应用于服务端,如图5所示,该寻路装置应用于加载有场景地图和传送信息表的应用程序,场景地图包括多个场景区域,以场景区域为单位在传送信息表中存储有多个场景区域各自对应的传送点信息;该寻路装置包括:网格获取模块11、信息获取模块12、逻辑执行模块13。

网格获取模块11,用于响应于对应用程序发出的寻路指令,从寻路指令中获取目标位置,并确定目标位置所处的目标场景区域;

信息获取模块12,用于从传送信息表中获取与目标场景区域对应的传送点信息;

逻辑执行模块13,用于基于与目标场景区域对应的传送点信息,执行与寻路指令对应的动作逻辑。

可选地,传送信息表中任一网格对应的传送点信息包括距离当前场景区域最近的最近传送点、以及最近传送点与当前场景区域的距离。

逻辑执行模块13基于与目标场景区域对应的传送点信息,执行与寻路指令对应的动作逻辑时,具体用于:

确定与寻路指令对应的位移对象;基于最近传送点以及最近传送点与目标场景区域的距离,将位移对象从当前位置移动至最近传送点。

可选地,多个场景区域为多个网格,多个网格包括多个传送点各自所处的传送点网格。

寻路装置还包括生成模块,用于将各个传送点网格对应的传送点信息存储至传送信息表;围绕各个传送点网格逐层遍历多个网格,以判断多个网格中各个网格与传送点网格之间的连通关系;基于连通关系获取各个网格对应的传送点信息,并将各个网格对应的传送点信息存储至传送信息表。

可选地,多个网格还包括与各个传送点网格邻接的多个第一层网格。

生成模块围绕各个传送点网格逐层遍历多个网格,以判断多个网格中各个网格与传送点网格之间的连通关系时,具体用于:

将各个传送点网格添加至搜索队列;从搜索队列中获取任一个传送点网格j,遍历与传送点网格j邻接的多个第一层网格,以判断传送点网格j与邻接的多个第一层网格之间的连通关系;若判定传送点网格j与第一层网格k之间连通,则将第一层网格k添加至搜索队列中,其中第一层网格k为与传送点网格j邻接的多个第一网格中的任一个;以搜索队列中的第一层网格为中心,对围绕第一层网格的下一层网格进行遍历,以判断下一层网格与各个传送点网格之间的连通关系。

可选地,生成模块遍历与传送点网格j邻接的多个第一层网格,以判断传送点网格j与邻接的多个第一层网格之间的连通关系时,具体用于:

以当前遍历到的第一层网格m的位置信息作为第一位置信息;判断是否存在与第一位置信息对应的第一寻路信息;若判定存在第一寻路信息,则获取第一寻路信息以及与第二位置信息对应的第二寻路信息,第二位置信息为传送点网格j的位置信息;基于第一寻路信息和第二寻路信息,判断传送点网格j与第一层网格m之间是否连通。

可选地,第一寻路信息为包含第一位置信息的第一多边形网格信息,第二寻路信息为包含第二位置信息的第二多边形网格信息。

生成模块基于第一寻路信息和第二寻路信息,判断传送点网格j与第一层网格m之间是否连通时,具体用于:

判断第一多边形网格信息与第二多边形网格信息之间是否阻塞;若判定第一多边形网格信息与第二多边形网格信息之间不阻塞,则确定传送点网格j与第一层网格m之间连通。

可选地,判定第一多边形网格信息与第二多边形网格信息之间不阻塞的情况包括以下之一:第一多边形网格信息与第二多边形网格信息之间存在共边;第一多边形网格信息与第二多边形网格信息为相同的共边多边形。

可选地,传送点网格j为多个传送点网格中的任一个,第一层网格k为与传送点网格j邻接的多个第一网格中的任一个。

生成模块基于连通关系获取各个网格对应的传送点信息,并将各个网格对应的传送点信息存储至传送信息表时,具体用于:

若传送点网格j与邻接的第一层网格k之间连通,则获取第一层网格k与传送点网格j之间的距离作为第一距离;并以第一距离和传送点网格j作为第一层网格k的传送点信息存储至传送信息表。

可选地,生成模块还用于:若传送信息表中存储有第一层网格k的传送点信息,则判断第一距离是否小于第一层网格k的传送点信息中的第二距离;若第一距离小于第二距离,则将第一距离和传送点网格j存储至传送信息表中,以更新传送信息表。

图5所示基于游戏场景的寻路装置可以执行前述各实施例中提供的方法,本实施例未详细描述的部分,可参考前述实施例的相关说明,在此不再赘述。

在一个可能的设计中,上述图5所示的寻路装置的结构可实现为一电子设备。

如图6所示,该电子设备可以包括:处理器21、存储器22。其中,所述存储器22上存储有可执行代码,当所述可执行代码被所述处理器21执行时,至少使所述处理器21可以实现如前述实施例中提供的基于游戏场景的寻路方法。其中,该电子设备的结构中还可以包括通信接口23,用于与其他设备或通信网络通信。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的各个模块可以是或者也可以不是物理上分开的。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

根据需要,本发明各实施例的系统、方法和装置可以实现为纯粹的软件(例如用java来编写的软件程序),也可以根据需要实现为纯粹的硬件(例如专用asic芯片或fpga芯片),还可以实现为结合了软件和硬件的系统(例如存储有固定代码的固件系统或者带有通用存储器和处理器的系统)。

本发明的另一个方面是一种计算机可读介质,其上存储有计算机可读指令,所述指令被执行时可实施本发明各实施例的基于游戏场景的寻路方法。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所公开的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。要求保护的主题的范围仅由所附的权利要求进行限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1