2D游戏中的路径规划方法、系统及电子设备与流程

文档序号:20915511发布日期:2020-05-29 13:28阅读:397来源:国知局
2D游戏中的路径规划方法、系统及电子设备与流程

本发明涉及游戏开发技术领域,尤其是涉及一种2d游戏中的路径规划方法、系统及电子设备。



背景技术:

现有的2d游戏中的路径规划方案大都采用将地图分块的方式,通过每个地图区块的属性及连接关系经过计算得到最终的路径规划方案,上述方式适用于固定视角的2d游戏中。但对于平台跳跃类游戏,上述方案并不适用,这是由于平台跳跃类游戏的地形组织单位是每层平台,如果按照分块划分会出现单一区块中包含多个平台或者不包含平台的情况,而且分块划分的方式也影响平台跳跃类游戏中物理系统的执行效果。



技术实现要素:

本发明实施例的目的在于提供一种2d游戏中的路径规划方法、系统及电子设备,以提高现有平台跳跃类游戏中的路径规划效果不佳的问题。

第一方面,本发明实施例提供了一种2d游戏中的路径规划方法,所述游戏的游戏场景中包括多个平台,所述平台用于供虚拟角色停留或行动,所述方法包括:

获取所述游戏场景中的全部平台,其中,包括与待规划路径的起点和终点对应的起点平台和终点平台;

确定各平台之间的行动连接关系;

根据所述行动连接关系,利用预设寻路算法计算得出所述起点平台至所述终点平台的最佳路径。

在一些实施方式中,上述确定各平台之间的行动连接关系的步骤,包括:

对于每个平台:

确定虚拟角色能够从该平台直接到达的所有直连平台;

确定虚拟角色从该平台到达每个直连平台所采用的行动方式;

其中,行动方式包括跳跃、攀爬或传送。

在一些实施方式中,上述确定虚拟角色从该平台到达每个直连平台所采用的行动方式的步骤之后,还包括:

计算每个行动方式在该平台上的有效启动范围。

在一些实施方式中,根据行动连接关系,利用预设寻路算法计算得出起点平台至终点平台的最佳路径的步骤,包括:

确定起点平台至终点平台的所有备选路径;

根据行动连接关系,利用预设寻路算法计算每个备选路径的耗时;

选取耗时最小的备选路径作为最佳路径。

在一些实施方式中,上述根据行动连接关系,利用预设寻路算法计算每个备选路径的耗时的步骤,包括:

对于每个备选路径:

确定该备选路径中的所有途经平台;

根据行动连接关系,计算相邻两个途经平台间的单位耗时;

叠加所有的相邻两个途经平台的单位耗时,获得该备选路径的耗时。

在一些实施方式中,上述计算相邻两个途经平台间的单位耗时的步骤,包括:

计算相邻两个途经平台间的横向耗时;

计算相邻两个途经平台间的纵向耗时;

将横向耗时与纵向耗时叠加,获得相邻两个途经平台间的单位耗时。

在一些实施方式中,上述横向耗时为:途经平台的长度与相邻两个途经平台间曼哈顿距离之和。

在一些实施方式中,上述纵向耗时为:纵向参数与失败次数的乘积;

其中,纵向参数为相邻两个途经平台间的曼哈顿距离,失败次数为虚拟角色在相邻两个途经平台之间未能达到的次数。

第二方面,本发明实施例提供了一种2d游戏中的路径规划系统,所述游戏的游戏场景中包含多个平台,所述平台用于供虚拟角色停留或行动,所述系统包括:

平台数据获取模块,用于获取所述游戏场景中的全部平台,其中,包括与待规划路径的起点和终点对应的起点平台和终点平台;

平台关系确定模块,用于确定各平台之间的行动连接关系;

平台路径计算模块,用于根据所述行动连接关系,利用预设寻路算法计算得出所述起点平台至所述终点平台的最佳路径。

在一些实施方式中,上述平台关系确定模块,包括:

第一关系确定模块,用于确定虚拟角色能够从该平台直接到达的所有直连平台;

第二关系确定模块,用于确定虚拟角色从该平台到达每个直连平台所采用的行动方式;其中,行动方式包括跳跃、攀爬或传送。

在一些实施方式中,上述平台关系确定模块,还包括:

启动范围计算模块,用于计算每个行动方式在该平台上的有效启动范围。

在一些实施方式中,上述平台路径计算模块,包括:

备选路径确定模块,用于确定起点平台至终点平台的所有备选路径;

路径耗时计算模块,用于根据行动连接关系,利用预设寻路算法计算每个备选路径的耗时;

路径获取模块,用于选取耗时最小的备选路径作为最佳路径。

在一些实施方式中,上述路径耗时计算模块,包括:

路径平台获取模块,用于确定该备选路径中的所有途经平台;

相邻路径耗时计算模块,用于根据行动连接关系,计算相邻两个途经平台间的单位耗时;

耗时获取模块,用于叠加所有的相邻两个途经平台的单位耗时,获得该备选路径的耗时。

在一些实施方式中,上述相邻路径耗时计算模块,包括:

横向耗时计算模块,用于计算相邻两个途经平台间的横向耗时;

纵向耗时计算模块,用于计算相邻两个途经平台间的纵向耗时;

耗时叠加计算模块,用于将横向耗时与纵向耗时叠加,获得相邻两个途经平台间的单位耗时。

在一些实施方式中,上述横向耗时计算模块中的横向耗时为:途经平台的长度与相邻两个途经平台间曼哈顿距离之和。

在一些实施方式中,上述纵向耗时计算模块中的横向耗时为:纵向参数与失败次数的乘积;

其中,纵向参数为相邻两个途经平台间的曼哈顿距离,失败次数为虚拟角色在相邻两个途经平台之间未能达到的次数。

第三方面,本发明实施例提供一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述2d游戏中的路径规划方法的步骤。

第四方面,本发明实施例提供一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行上述2d游戏中的路径规划方法的步骤。

本发明实施例提供了一种2d游戏中的路径规划方法、系统及电子设备,该游戏中的游戏场景中包括多个平台,平台用于供虚拟角色停留或行动。该2d游戏中的路径规划方法首先获取游戏场景中的全部平台,其中,包括与待路径规划的起点和终点对应的起点平台和终点平台,再确定各平台之间的行动连接关系,最后根据行动连接关系,利用预设寻路算法计算得出起点平台至终点平台的最佳路径。

采用本发明实施例提供的2d游戏中的路径规划方法、系统及电子设备,可以将平台抽象为点,并将平台之间的连接关系抽象为点之间的连线,并且对于一些固定地图的游戏内,这些步骤都可以在预处理中完成,加快效率。还可以将移动控制进行分类控制,实现了针对每一个控制分别进行处理,使得控制方案更加灵活,并提升了扩展性。

附图说明

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

图1为本发明实施例提供的2d游戏中的路径规划方法的流程图;

图2为本发明实施例提供的2d游戏中的路径规划方法中步骤s102的流程图;

图3为本发明实施例提供的2d游戏中的路径规划方法中步骤s103的流程图;

图4为本发明实施例提供的2d游戏中的路径规划方法中步骤s302的流程图;

图5为本发明实施例提供的2d游戏中的路径规划方法中步骤s32的流程图;

图6为本发明实施例提供的某游戏中的地图示意图;

图7为本发明实施例提供的某游戏中的虚拟角色跳跃过程优化示意图;

图8为本发明实施例提供的2d游戏中的路径规划方法中的路径点加载预处理的流程图;

图9为本发明实施例提供的2d游戏中的路径规划方法中的虚拟角色移动控制的流程图;

图10为本发明实施例提供的2d游戏中的路径规划系统的结构示意图;

图11为本发明实施例提供的电子设备的示意图。

具体实施方式

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

2d游戏是二维交互式的游戏,游戏中的视角一般情况下是固定的,此类游戏下的人物处在一个二维游戏界面中,游戏界面中通常设置有不同高度的平台,玩家通过操控人物躲避或者跳跃至平台来进行游戏。

在一些2d游戏中,游戏角色可通过自行运动的方式来进行游戏,例如玩家通过选择游戏场景地图中的目标点后,游戏角色可自动运行至该目标地点。由于是2d场景,通常只需要将地图划分为多个网格,根据网格的连接关系计算出最短路径,进而操纵游戏角色沿着该路径进行移动。因此,路径规划对于游戏体验来说至关重要。

但现有的网格划分模式实现的路径规划在平台跳跃类游戏中的游戏体验效果不佳,这是由于平台跳跃类游戏的地形组织单位是每层单一的平台,在网格划分的过程中,一些网格中可能包含多个平台,而一些网格中可能不包含平台,因此采用该方式并不能完整表征游戏场景,从而影响最终的路径规划。

在平台跳跃类游戏中,游戏角色需要大量的跳跃动作最终完成游戏,跳跃的过程中需要遵循相关的物理系统,来模拟跳跃过程中产生的重力效果,而现有的采用网格方式进行路径规划中并没有考虑该类型场景,影响最终的路径规划效果。

针对上述平台跳跃类游戏中存在的路径规划效果不佳的问题,本发明实施例针对此类游戏场景提供一种游戏中的路径规划方法、系统及电子设备。

本发明实施例提供了一种2d游戏中的路径规划方法,在该实施例中,游戏场景中包括多个平台,这些平台用于虚拟角色的停留或行动。该方法的流程图如图1所示,包括以下步骤:

步骤s101:获取游戏的游戏场景中的全部平台,其中,包括与待规划路径的起点和终点对应的起点平台和终点平台。

在平台跳跃类游戏中所提到的平台,位于游戏场景中不同高度的区域。大多数平台是平面的,虚拟角色可以在平台上进行水平移动;也有一些平台是倾斜的,虚拟角色位于该平台上移动时会受到类似重力的影响。

不同类型的游戏,所包含的平台类型也各不相同,常见的平台是硬质水平的平台,类似地面,虚拟角色在该平台上与地面并无差异;有一些游戏中的平台是具有弹性的,类似弹簧蹦床,虚拟角色在该平台上无法静止站立,只能上下跳跃;还有一些游戏的平台类似绳索,虚拟角色只能挂在该平台上,也无法静止站立(或者无法长时间站立);还有的平台可以是管道类的,虚拟角色可以站在管道上方,也可以钻进管道内部。另外,为了增强游戏的趣味性,也可以将以上不同类型的平台中的多种整合在同一游戏或同一场景中,本实施例不局限于此。

由于平台的属性以及材质不同,虚拟角色的状态也不同,例如在硬质水平的平台中,虚拟角色可以长时间停留,也可以进行移动或攻击;在类似非水平的硬质平台中,虚拟角色也可以长时间停留,但要需要执行相关操作来抵消重力效果带来的滑动,这个过程中虚拟角色也可进行移动或攻击;在弹性平台中,由于虚拟角色无法进行停留,只能上下跳跃,因此虚拟角色的移动只能通过跳跃来实现,跳跃的过程中虚拟角色也可以实现攻击;在绳索类的平台中,由于虚拟角色需要用四肢来固定在平台中能够实现停留,但移动速度会受到影响,而且虚拟角色通常无法进行攻击敌人;在管道类的平台中,当虚拟角色位于管道上方时的状态与硬质平台相同,可以实现停留、移动以及攻击;而当虚拟角色位于管道内部时,虚拟角色通常只能趴在管道内部进行移动,移动速度较慢。

从以上描述中可以看出,不同类型的平台会使虚拟角色处于不同的状态,本实施例提到的游戏场景中平台类型并不仅限于以上几种。

平台的获取方式可通过遍历游戏场景中包含的所有部件并从中获取平台,具体的,平台中设置有相关的标记,通过该标记可得到所需的平台。实际执行时,开发者在游戏场景地图进行编辑的过程中就将平台设置唯一的id,该id中可设置特殊格式来方便识别。例如可将该id设置为“字母-数字”的方式,其中的字母为固定的,数字是累加的,通过连接符号将二者进行连接,形成一个唯一的id,当需要遍历获取平台时,只需要遍历id中是否包含该固定的字母,即可快速获取游戏场景中已设置的所有平台。

路径规划的起点平台和终点平台是指游戏虚拟角色所移动的起点和终点,起点平台通常是指虚拟角色当前所处的平台,也可是游戏开始时虚拟角色出发时的起始平台;终点平台通常是指游戏结束位置的平台,也可以是玩家自行选取的终点平台。

起点平台的获取方式,可以通过虚拟角色所处的位置来获得,由于虚拟角色的位置通常是移动的,因此移动过程中对所有平台进行遍历,通过计算虚拟角色的位置来获取其所处的平台。如果游戏中是将虚拟角色当前位置作为起点平台的话,此时所获取的平台即为起点平台;而如果游戏中是将角色出发时的平台作为起点平台的话,那么无需上述计算过程,根据起点平台的id可直接获取。

终点平台的获取方式可根据玩家自行选取的方式进行获取,具体的说当玩家选取了某个平台作为终点平台,在玩家进行选取的过程中直接调取该平台的id,即可获得该终点平台。如果该终点平台是游戏结束位置的平台,那么无需进行上述响应过程,可直接获取终点平台的id。

步骤s102:确定各平台之间的行动连接关系。

虚拟角色在不同平台之间的行动具有多种类型,例如虚拟人物在上方平台行动至下方平台中,可沿着上方平台的两侧直接移动,然后下落至下方平台中,这个过程类似自由落体;也可以在两侧通过跳跃的方式下落至下方平台。而当虚拟人物从下方行动至上方时,可通过跳跃的方式实现;如果下方平台与上方平台之间设置有绳索类的攀爬装置,也可通过攀爬的方式实现平台之间的行动;如果下方平台为弹簧类的弹性平台,虚拟人物可通过弹簧跳直接跳跃至上方平台中。由此可见,虚拟人物在平台与平台之间的行动类型较多,上述行动类型只是举例说明,本实施例中并不只限定上述的类型。

平台与平台之间的行动连接关系表征了两个平台之间如何实现跨越,通过行动连接关系,实现了所有的平台之间的相互关联。在游戏场景地图进行编辑的过程中,可事先将虚拟人物可以停留或行动的平台进行标记,并将这些平台之间的连接关系也配置完成,通过预先配置的方式保证了路径规划的可执行性。

还有一种实现平台与平台时间的行动连接关系的方式就是模拟抛物线的方式。在本领域中,抛物线作为一种简单易用的物理模型常用于物体跳跃或者炮弹移动等相关运动的轨迹计算中,虚拟角色在平台与平台之间通过模拟抛物线的方式进行跳跃,也能够直观的确定平台与平台之间的连接关系。这种连接关系的配置过程时,在房间为单位的游戏中比较容易配置,但在包含多种平台的游戏场景中配置较为复杂。

虽然各个平台的类型和属性可能是不同的,但平台上的虚拟角色均可进行停留或行动,因此在游戏场景中的平台往往是具有一定长度的平面或其组合,也可以是具有一定长度线段或其组合,但不会是一个点。但本实施例中,将平台中的长度及宽度进行忽略,并将平台模拟为一个点,行动的连接关系模拟为有方向的连接线,那么游戏场景中的平台之间的连接关系组合后形成一个闭合图形,这是因为游戏中的平台在无其它特殊场景时不能让虚拟角色只能上不能下,要保证游戏中不能存在能上去却不能下来的平台,所以该闭合图形的所有节点的出度和入度均大于零。

步骤s103:根据行动连接关系,利用预设寻路算法计算得出起点平台至终点平台的最佳路径。

行动连接关系确立以后,表明所有平台之间的完成相互连接,其中就包括起点平台和终点平台。而二者之间的最佳路径的计算通过预设的寻路算法得以实现,该寻路算法可采用深度优先搜索算法、广度优先搜索算法、dijkstra算法、贪婪最佳优先搜索算法、a*算法或b*算法中的任意一种,也可以使用上述算法的相互结合。

通过预设的寻路算法,将起点平台与终点平台之间所有连接的平台进行遍历计算得到最佳路径,最佳路径的获得并不一定是最短的路径,而是结合各个平台的属性以及虚拟角色的状态综合判断的结果。例如某路径的距离虽然最短,但路径中包含最多的平台跨越动作,显然这并不是最佳的路径;而另一路径虽然距离不是最短,但该路径中包含有不同房间的传送连接,可快速将虚拟角色传送至另一房间,从而躲避一些平台跨越的动作,因此该路径的效果反而好于前一路径。

可见,最佳路径的选择,是一个综合性的判断过程,由于游戏场景中的起点平台与终点平台并一定固定,因此最佳路径的选择过程也并非是固定的,路径选择的计算过程也是实时执行的。最佳路径的计算过程中,将所有平台抽象为一个点,各个平台之间的行动连接关系抽象为连接线,由点线组成了一张抽象图,通过该图进行最佳路径的选取,最终得到点序列结果,该序列中所包含的所有点即为起点平台和终点平台之间的最佳移动路径。

本发明实施例提供的2d游戏中的路径规划方法可知,通过获取游戏场景中的全部平台信息作为数据源,再确定平台与平台之间的行动连接关系后,利用预设寻路算法计算得出起点平台至终点平台的最佳路径。上述路径规划的过程中可将平台抽象为一个点,平台之间的行动连接关系可抽象为线,在点线组成的图中利用预设的寻路算法得到起点平台和终点平台之间的最佳移动路径。对于一些游戏场景固定的游戏中,上述过程可在游戏预处理过程中完成,增加了游戏的执行效率;而对于平台内的移动以及平台之间的移动,可方便进行分别控制,针对每一个控制分别进行处理,处理方式更加灵活,提高了方案的扩展性。

在一些实施方式中,上述确定确定各平台之间的行动连接关系的步骤s102中,对于每个平台而言,当虚拟角色处于某一平台时,可将该平台作为主体来确定与该平台的行动连接关系,具体过程如图2所示,包括:

步骤s201,确定虚拟角色能够从该平台直接到达的所有直连平台。

平台跳跃类游戏中,虚拟角色是通过不同平台之间的跳跃来进行游戏,因此游戏中的虚拟角色一定处于某一平台中,而虚拟角色位于该平台上时,可通过计算该平台与周围其它平台的距离来判断虚拟角色能否到达周围平台。

当虚拟角色位于高层平台,位于该高层平台下放的底层平台是可以到达的,这个过程中可加入高度阈值来进行约束,例如当高度大于预设的高度阈值时,虚拟角色从高层平台跳下时会减少生命值甚至直接死亡;也可以直接约束虚拟角色不能直接跳下;或者在平台边缘时游戏画面提供相关提示,提示玩家从该高层平台跳下时所产生的后果。

当虚拟角色位于底层平台时,结合虚拟人物的跳跃能力,来获取其能否到达的高层平台。跳跃的过程中可结合水平距离进行综合判断,例如位于虚拟角色距离自己前方1个单位、高度为2个单位的高层平台进行跳跃时,如果虚拟角色的跳跃能力只有2个单位,那么就不能够达到该高层平台,而需要虚拟角色前进1个单位,到达高层平台的正下方时,才能通过跳跃达到高层平台。

虚拟角色位于该平台时,该平台处于激活状态,通过获取该平台的id值来对周围其它平台进行遍历,由于大多数平台跳跃类游戏中的平台是固定设置的,因此只需要遍历该平台周围的平台即可,减少遍历的数量,提升效率。周围平台的获取方式可通过相关阈值的判断进行,例如该阈值可设置为地图视野范围大小,因为在实际游戏过程中,玩家需要在视野中看到其它平台才能控制虚拟角色进行跳跃,一般不会在看不到其他平台的时候直接控制虚拟角色去跳跃或下落。

步骤s202,确定虚拟角色从该平台到达每个直连平台所采用的行动方式。

在确定虚拟角色能够从该平台直接到达的所有直连平台之后,即可确定该虚拟角色的行动方式,结合平台之间的高度以及连接关系,行动方式包括跳跃、攀爬或传送。

当虚拟角色从低平台到达高平台时,如果两个平台之间没有其它连接,则虚拟角色通过跳跃的行动方式到达高平台;如果两个平台之间有其它连接,例如有绳索或者楼梯时,虚拟角色可通过攀爬的行动方式到达高平台,攀爬的过程中也可以执行跳跃,具体实现过程需要结合游戏场景来综合考虑。

当虚拟角色从高平台到达低平台时,如果两个平台之间没有其它连接,虚拟角色可通过直接从高平台边缘移动的方式下落到低平台中;或者可从高平台边缘采用抛物线的方式跳跃至低平台中。下落的过程可通过高度差来进行约束,例如当下落的高度差大于了伤害阈值,当虚拟角色下落到低平台时会减少生命值,因此可直接约束虚拟角色不能跳跃,只能选用其它路线;或者虚拟角色从高平台跳跃至低平台时生命值减少后还没有死亡,可以让虚拟角色进行跳跃。

还有一种行动方式为传送,传送过程需要预先布置的传送门来实现,传送门一般分为两端,两端分别布置在不同的平台中,通过传送门可直接完成传送。

在一些实施方式中,上述确定虚拟角色从该平台到达每个直连平台所采用的行动方式的步骤之后,还包括:计算每个行动方式在该平台上的有效启动范围。

行动方式确立后,可计算该行动方式在虚拟角色所处平台的有效启动范围,该启动范围可理解为行动的范围。当虚拟角色采用跳跃的方式从低平台到达高平台时,可通过虚拟角色的跳跃能力来获取类似抛物线的行动范围。在虚拟角色跳跃的实施过程中,一般会通过跳跃行动范围最强的轨迹进行跳跃,虽然之前步骤中采用该轨迹能够跳跃至高平台,但跳跃过程中虚拟角色会收到玩家的反方向控制,或者说遭遇攻击,最终导致跳跃失败。而玩家在同一地点多次跳跃失败后,容易对玩家心里造成负面影响,最终影响游戏体验,因此多次跳跃失败后可增加相关虚拟角色的有效启动范围,使得虚拟角色跳跃能力增加,最终完成跳跃。

可见,虚拟角色每个行动方式在该平台上的有效启动范围可结合跳跃失败次数以及跳跃尝试次数进行综合考虑,并在进行路径规划的过程中得以实现,例如如果虚拟角色多次在同一地点跳跃失败,则后续的路径规划时可绕开该平台之间的跳跃。

在一些实施方式中,根据行动连接关系,利用预设寻路算法计算得出起点平台至终点平台的最佳路径的步骤s103,如图3所示,包括:

步骤s301,确定起点平台至终点平台的所有备选路径。

在获取所有平台与平台的行动连接关系后,将平台抽象为一个点,将起点平台作为起始点,终点平台作为终止点,其它平台作为中间点,通过连接获得所有备选路径。备选路径的规划过程中,路径方向要遵循起点-终点的方向,一般情况下不能出现反方向的路径规划。

步骤s302,根据行动连接关系,利用预设寻路算法计算每个备选路径的耗时。

根据行动连接关系抽象为一个有向的连接线,与平台抽象的点组合成一个点线图形,通过该点线图形可直观的对所有起点到终点的路径进行展示,而且由于摒弃了其它相关属性,可更加快速的利用预设的寻路算法获取每个备选路径的耗时。

预设的寻路算法中根据行动连接关系以及每个备选路径的距离,结合虚拟角色的运动速度最终得到每个备选路径的耗时。需要注意的是,最佳路径并不是最短的路径,这需要结合路径中不同平台之间的行动连接关系来进行计算,例如某路径中虽然距离最短,但包含多个跳跃动作和攀爬动作,虽然跳跃动作并不增加太多耗时,但会增加失败的风险;而攀爬动作虽然可能减少路径长度,但攀爬速度较慢,也不利于减少耗时。

如果某路径中包含传送门,可能该路径距离比较长,但传送门躲避了其它路径中的跳跃平台以及攀爬平台等高耗时以及高风险的动作,因此耗时并不一定最多。

寻路算法可采用深度优先搜索算法、广度优先搜索算法、dijkstra算法、贪婪最佳优先搜索算法、a*算法或b*算法中的任意一种来实现,也可以使用上述算法的相互结合。

例如,在一些实施方式中,对于每个备选路径的耗时计算过程,可通过以下步骤得以实现,具体的如图4所示,包括:

步骤s31,确定该备选路径中的所有途经平台。

每个备选路径中均是从起点平台开始,到重点平台结束,中途包含多个其它平台,备选路径的整体走向为起点-终点的方向。上述平台的获取可通过预先设置的id值进行获取。

步骤s32,根据行动连接关系,计算相邻两个途经平台间的单位耗时。

相邻两个平台之间需要结合行动连接关系来进行耗时计算,例如跳跃的过程可模拟抛物线的方式通过虚拟角色的初速度、起跳高度以及起跳完成的距离来计算耗时;如果虚拟角色采用攀爬行的行动方式,可通过攀爬距离和攀爬速度来计算耗时;如果虚拟角色采用弹簧跳的方式进行行动,需要根据平台的弹性系数以及角色的初始速度来获得耗时;如果虚拟角色采用传送方式进行行动,那么可忽略平台之间的耗时,也可根据游戏中设置的耗时时间来直接获取,这是因为在一些游戏中为了增加游戏效果,在通过传送门进行传送过程中会假如一个时间延迟,来模拟传送的效果,但该传送延迟时间通常情况下是固定的,可直接进行获取。

步骤s33,叠加所有的相邻两个途经平台的单位耗时,获得该备选路径的耗时。

该备选路径中的所有相邻的两个平台的耗时进行叠加,从而获得该备选路径的耗时,由于平台在之前步骤中抽象成为了一个点,并不存在长度,因此该步骤中暂不考虑虚拟角色在平台上所行动的耗时。

步骤s303,选取耗时最小的备选路径作为最佳路径。

可见,耗时最小的备选路径并不一定是最短路径,而是虚拟玩家结合不同平台之间的行动连接关系并结合预设的寻路算法计算得到的。

在一些实施方式中,上述计算相邻两个途经平台间的单位耗时的步骤s32,如图5所示,包括:

步骤s501,计算相邻两个途经平台间的横向耗时。

步骤s502,计算相邻两个途经平台间的纵向耗时。

需要注意的一点,上述步骤s501和步骤s502并不存在先后顺序,所提到的横向耗时以及纵向耗时的计算过程是并行的。

步骤s501中的横向耗时需要考虑平台的长度值,根据虚拟角色的速度以及平台长度来获取虚拟角色在该平台上的耗时。在一些实施方式中,上述横向耗时为:途经平台的长度与相邻两个途经平台间曼哈顿距离之和。

相邻两个平台之间的曼哈顿距离,是指相邻平台之间所抽象的两个点在标准坐标系上的绝对轴距总和,表征了两个平台之间的距离。当两个平台之间水平轴上没有重叠部分,那么两个平台距离就是两个平台中距离最近的点之间的曼哈顿距离;如果有重叠,那么两个平台距离就是水平轴上坐标差。

在一些实施方式中,步骤s502中的纵向耗时为:纵向参数与失败次数的乘积;其中,纵向参数为相邻两个途经平台间的曼哈顿距离,失败次数为虚拟角色在相邻两个途经平台之间未能达到的次数。

纵向参数中包含了相邻两个途径平台之间的距离值,该距离值为该相邻平台之间的曼哈顿距离,在该实施方式中需要考虑虚拟角色的失败次数,当虚拟角色跳跃失败时,将失败次数进行累加并记录,该参数可作为虚拟角色下次进行跳跃时的参数,并对虚拟角色的状态进行改变。例如可增加虚拟角色的起跳速度,使得虚拟角色更容易完成平台之间的跳跃,防止出现多次失败导致玩家的游戏兴趣下降。

步骤s503,将横向耗时与纵向耗时叠加,获得相邻两个途经平台间的单位耗时。

将获取的横向耗时以及纵向耗时进行叠加,叠加的过程可采用直接相加的方式,也可在横向耗时以及纵向耗时中加入相关的权重系数,来对横向以及纵向的耗时的重要程度进行表征。

为了更加直观描述上述过程,下面结合某款游戏对上述2d游戏中的路径规划方法进行描述,该游戏的画面如图6所示,从该游戏的地图可知,该地图中包含多个房间,每个房间都有门与其它房间相连接,而且一些房间之间通过楼梯相连接,还存在着类似传送门的地道口来实现不同房间的互通。

对于上述游戏中的各类平台,首先通过初始化相关类和对象进行表征,具体实现过程中,初始化vertex对象来代表平台的节点,edge代表一个vertex与另一个vertex的连接关系,每一个vertex都有1个或n个edge相连接。astar类中保存着游戏地图中所有的vertex,astar对象在全局只有唯一的一个,所有路径的计算均从该类提供的计算接口calculatepath来实现。

游戏中预设的寻路算法采用a*算法,通过该算法计算起点a到终点z的路径规划,在起点a与终点z之间存在一个连通点,记为b。在a*算法中包含两个估值函数,分别记为hfunc和wfunc,其中hfunc负责计算连通点b到终点z的耗时;wfunc负责计算起点a到联通点b的耗时。将二者相加得到a经过b到z的估计耗时。

上述hfunc和wfunc函数对于a*的运行效率至关重要,在普通的划分网格类的游寻路地图而言,hfunc函数的计算精度较高,直接使用曼哈顿距离或者欧氏距离均可;但wfunc函数可以根据地形设置不同的权重值,这在平台跳跃类游戏中会引起较大的误差。

如图6中所示的地图可知,该游戏与其它大多数2d游戏相似,而虚拟角色的起点位于杂物间,因此起点平台就是杂物间平台;虚拟角色的终点是去阁楼,因此终点平台就是阁楼所处的平台。阁楼的选取可通过玩家手动点击屏幕或者其它触控方式得以实现,或者根据游戏剧情需要而自动获取的。在进行路径规划的过程中,如果直接使用曼哈顿距离的话,地图中的餐厅和厨房里的相关平台也必然都会计算一遍,然后才会从楼梯间找到真正能到达阁楼的道路。这是因为对于同样水平高度平台来说,厨房和餐厅里所包含的平台与阁楼的水平距离的差值较小,使用曼哈顿距离估算出来的hfunc的结果也会较小。

为了解决上述问题,在进行路径规划时考虑房间路径距离,例如虚拟角色从厨房到阁楼时,路径必然是厨房-楼梯间-阁楼,房间路径距离就是厨房宽度与楼梯间宽度之和。而楼梯间到阁楼的房间路径距离就只有一个楼梯间的宽度,由此可见,进行路径规划时只需考虑水平方向的距离即可,这是因为游戏地图中的虚拟角色基本上不存在沿着竖直方向绕路的情况,直观的说就是不存在先下去再上来的操作。因此竖直方向纵向距离使用两个平台的竖直位置做差即可实现。

edge代表一个vertex与另一个vertex的连接关系,其中包含weight成员函数,用来衡量两个平台进行移动的代价。weight函数的结果取决于两个平台之间的相对位置,如果两个平台的水平轴上没有重叠的部分,那么两个平台距离就是两个平台上距离最近的点之间的曼哈顿距离;如果两个平台的水平轴上包含有重叠部分,那么两个平台距离就是水平坐标的差值。在一般划分网格类的路径规划中,可直接使用weight来作为wfunc的最终结果,但在平台跳跃类游戏中则不建议直接代替,这是因为平台跳跃类游戏有时会有跨平台跳跃的情况出现。

跨平台跳跃的情况如图7所示的游戏界面中可直观展现,图7中的虚拟角色需要从低层平台跳往高层平台,从虚拟角色的跳跃属性可知每一次跳跃可跳到上方第3个台阶。如果直接使用weight值来进行估算,那么虚拟角色一级一级的跳跃与直接三级跳跃的结果是相同的,如果再加上hfunc的结果,最终规划的路径很可能就是一级一级的跳。导致虚拟角色明明可以一次跳跃完成的动作,需要做三次动作,游戏体验度会下降。

针对于上述情况,将wfunc的返回值均置0,高低差异由hfunc去进行控制。可见wfunc的最终作用就是进行路径的动态调整,当虚拟角色从两个平台之间进行移动时,如果移动失败,需要记录失败发生的次数。为了简化游戏中的数据保存量,可通过虚拟角色的速度来直接衡量失败发生的次数。具体实施过程中,当用户在不同平台进行移动的过程中,如果收到攻击或者受到玩家反方向控制时,会出现移动不成功的情况。当虚拟角色再次进行对同一平台进行移动时,会适当增加虚拟角色的速度,来提高虚拟角色的通过成功率;如果移动还不成功,则继续增加虚拟角色的速度。由此可见,通过虚拟角色的速度可以直接获取平台之间移动时的失败次数。

wfunc的最终结果也根据失败次数n进行调整,调整的过程可直接采用乘积的方式,如下:

wfunc=weight*n

上述过程中,如果计算出的结果是必然失败,那么n的数量增长幅度需适当增加。这是由于如果虚拟角色收到攻击或者其它原因导致跳跃能力下降,使得无法在该路径下的两个平台完成移动,是必然的移动失败。在进行下一次跳跃时,n的数值增长幅度可适当增大,防止出现多次跳跃不成功的情况,导致玩家对于游戏的体验度下降。

如果游戏不考虑性能瓶颈时,wfunc还可通过以下方式进行计算,就是根据当前路径的总耗时来进行计算,即

wfunc=预估总耗时*(失败次数/尝试次数)

尝试次数可以是一个配置的数值,根据wfunc需要增大的速度进行调整,也可实现wfunc的快速增大。此类方法在虚拟角色的每一次出现失败时都需要重新计算,而且如果是在帧同步游戏中,运算过程采用定点数运算,资源消耗较多,但该类方法的精度更高。

路径规划完成后对于虚拟人物的控制过程中,还需要进行相关的路径规划。具体实施过程中,在正常运行状态下的寻路过程是由行为树发起的,行为树指定终点位置以及对应的终点平台,调用astar进行路径规划。路径规划完成后,控制虚拟角色进行自行移动,直至行为树给出停止移动的指令或者达到目标。

自行移动的过程包括以下三个部分:

1.在一个平台上向另一个平台的连接关系的基类中所标记的起跳范围进行移动。

2.到达起跳范围后,根据该基类的类型,交给不同的控制类去控制不同跳跃或移动。

3.到达目标平台后,移动到目标点位置。

具体实施过程中,寻路过程控制的核心管理控制类是platformmanager管理类和automovecontroller控制类。当开始战斗时,首先生成platformmanager管理类,用于根据配置的路点信息生成平台以及平台之间的连接关系,platformmanager管理类中包含所有的平台platform基类,platformmanager也是全局唯一的。

platform作为平台的基类,包含了平台起点startpoint、终点endpoint等基础信息,根据不同的平台类型会有不同的子类与之相对应,例如:slopplatform对应斜面平台、horizontalplatform对应水平平台、climbplatform对应攀爬平台、elasticplatform对应弹簧跳平台。如果需要加入其它特殊平台,可直接加入,方便后期的开发与维护。

每个platform会根据自身与其它平台之间的连接关系,包含多个link基类,link为连接关系的基类,连接关系表征两个平台之间如何跨越,例如其中的jumplink就表示通过跳跃方式通过,climblink表示通过攀爬方式通过。linktype连接关系有jump、walk、climb、elasticjump(弹簧跳),对应的link也有jumplink、walklink、climblink、elasticjumplink子类。后续如果需要增加其它连接关系,可直接增加一个linktype以及一个新的link子类即可。同时,link基类中也记录了虚拟角色从当前平台到另一个平台的移动范围,例如起跳范围,该起跳范围可使用模拟抛物线的方式进行计算并获取。

platformmanager还持有astar寻路算法,如上方介绍的,主要负责从平台中找到最短路径。

automovecontroller主要负责虚拟角色的移动控制,不同的虚拟角色持有不同的automovecontroller对象。

automovecontroller持有一个pathfinder,这个pathfinder中主要存储有虚拟角色自身在寻路过程中的一些动态的信息,为astar算法提供hfunc和wfunc,完成路径估值。然后它还负责连接platformmanager,以完成路径规划。

automovecontroller持有一个automove用于控制ai在一个平台上的移动。autoonemovecontroller用于控制角色从一个平台到另一个平台的移动,autoonemove是基类,主要方法包括onenter、onupdate、onexit,跟linktype对应,每种连接都会有不同的控制子类去控制,比如autoonejump、autooneelasticjump。后续如果有其它连接方式,只需扩展新的autoonemove子类即可。其中比较重要的是autoonejump,只是因为平台类游戏场景中大部分都是通过跳跃来进行平台之间的移动,onenter的时候,会根据平台之间横向纵向距离去计算方向键、跳跃键按下的时间(跳跃高度由跳跃键按下时间控制),然后根据需要按下方向键、跳跃键,并使用定时器去控制何时松开,onupdate每次tick都会调,主要用于控制角色在空中的位置,比如一些需要空中转向的过程就由此处完成,onexit去除定时器。

对上述实施例中所描述的路径规划方法流程进行简化,可分为路径点加载预处理的流程以及虚拟角色移动控制流程。

具体的,路径点加载预处理的流程如图8所示,包括:

步骤s801,将所有平台信息进行加载,主要包括平台id、起点平台以及终点平台等信息。

步骤s802,建立平台之间的连接关系。

步骤s803,计算平台之间的移动连接方式,包括跳跃、攀爬、传送等。

步骤s804,计算从一个平台到另一个平台移动开始范围。

如果是跳跃连接,则计算起跳范围;

如果是攀爬连接,则计算攀爬起始位置;

如果是传送连接,则计算传送的起始位置。

对虚拟角色移动控制流程,如图9所示,包括:

步骤s901,获取虚拟角色向下一个平台的移动方式、移动开始的位置范围。

步骤s902,将虚拟角色移动至起始位置范围之内。

步骤s903,调用相应的移动方式处理函数,进行一次移动。

步骤s904,虚拟角色在移动过程中,对虚拟角色进行持续控制,例如跳跃过程中对虚拟角色进行跳跃姿态与位置控制。

步骤s905,判断虚拟角色是否达到下一个平台。

如果是,则完成虚拟角色对于该平台的移动控制,并进行后续的平台移动过程执行步骤s907;如果否,则执行步骤s906。

步骤s906,进行错误处理,并重新进行路径规划过程。

步骤s907,判断虚拟角色是否达到目标平台。

如果是,结束虚拟角色的移动控制;如果否,重新回到步骤s901进行下一个平台的移动控制。

为了提升路径规划效果以及游戏体验度,可对路径规划中的计算过程进行相关优化。对于路径规划而言,相关优化的过程就是对hfunc以及wfunc进行调整,使它们最终实现的路径规划更加合理,从而使得路径规划过程中所需要遍历的平台数量减少,提升路径规划的效率。移动控制主要模拟抛物线的运算,该类运算计算量较大,也比较耗时,因此可预先缓存一个抛物线表,相关运算可直接通过查表得以完成,减少计算压力。

在路径规划的过程中,由于是计算出来的规划结果,虚拟角色在跳跃的过程是一定能够实现的,而实际上真实玩家可能会在跳跃的过程中会产生失误的,例如起跳点的位置过去提前;起跳后又受到玩家的反方向控制等。而且平台之间的距离大都是固定的,路径规划后的虚拟角色通过相同平台之间时其轨迹都是相同的,过于机械化,导致游戏体验不佳。因此可在行为树中增加相关失误机制,故意增加失误出现的概率,使得路径规划中的虚拟人物运动时更加接近真实场景。

可见,上述实施例中提供的2d游戏中的路径规划方法可知,在路径规划过程所需的相关控制类的扩展更加方便,执行效率进一步提升,对于虚拟角色的控制也更加灵活。

本发明实施例提供了一种游戏中的路径规划系统,游戏的游戏场景中包含多个平台,平台用于供虚拟角色停留或行动,如图10所示,该系统包括:

平台数据获取模块1001,用于获取游戏场景中的全部平台,其中,包括待规划路径的起点和终点对应的起点平台和终点平台;

平台关系确定模块1002,用于确定各平台之间的行动连接关系;

平台路径计算模块1003,用于根据行动连接关系,利用预设寻路算法计算得出起点平台至终点平台的最佳路径。

在一些实施方式中,上述平台关系确定模块1002,包括:

第一关系确定模块,用于确定虚拟角色能够从该平台直接到达的所有直连平台;

第二关系确定模块,用于确定虚拟角色从该平台到达每个直连平台所采用的行动方式;其中,行动方式包括跳跃、攀爬或传送。

在一些实施方式中,上述平台关系确定模块1002,还包括:

启动范围计算模块,用于计算每个行动方式在该平台上的有效启动范围。

在一些实施方式中,上述平台路径计算模块1003,包括:

备选路径确定模块,用于确定起点平台至终点平台的所有备选路径;

路径耗时计算模块,用于根据行动连接关系,利用预设寻路算法计算每个备选路径的耗时;

路径获取模块,用于选取耗时最小的备选路径作为最佳路径。

在一些实施方式中,上述路径耗时计算模块,包括:

路径平台获取模块,用于确定该备选路径中的所有途经平台;

相邻路径耗时计算模块,用于根据行动连接关系,计算相邻两个途经平台间的单位耗时;

耗时获取模块,用于叠加所有的相邻两个途经平台的单位耗时,获得该备选路径的耗时。

在一些实施方式中,上述相邻路径耗时计算模块,包括:

横向耗时计算模块,用于计算相邻两个途经平台间的横向耗时;

纵向耗时计算模块,用于计算相邻两个途经平台间的纵向耗时;

耗时叠加计算模块,用于将横向耗时与纵向耗时叠加,获得相邻两个途经平台间的单位耗时。

在一些实施方式中,上述横向耗时计算模块中的横向耗时为:途经平台的长度与相邻两个途经平台间曼哈顿距离之和。

在一些实施方式中,上述纵向耗时计算模块中的横向耗时为:纵向参数与失败次数的乘积;

其中,纵向参数为相邻两个途经平台间的曼哈顿距离,失败次数为虚拟角色在相邻两个途经平台之间未能达到的次数。

本发明实施例提供的游戏中的路径规划装置,与上述实施例提供的2d游戏中的路径规划方法具有相似的技术特征,详细实现方式本实施例中不再赘述。

本实施例还提供一种电子设备,为该电子设备的结构示意图如图11所示,该电子设备100包括处理器101和存储器102;其中,存储器102用于存储一条或多条计算机指令,一条或多条计算机指令被处理器执行,以实现上述用于2d游戏中的路径规划方法。

图11所示的电子设备还包括总线103和通信接口104,处理器101、通信接口104和存储器102通过总线103连接。

其中,存储器102可能包含高速随机存取存储器(ram,randomaccessmemory),也可能还包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。总线103可以是isa总线、pci总线或eisa总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

通信接口104用于通过网络接口与至少一个用户终端及其它网络单元连接,将封装好的ipv4报文或ipv4报文通过网络接口发送至用户终端。

处理器101可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器101中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器101可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessor,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本公开实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本公开实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器102,处理器101读取存储器102中的信息,结合其硬件完成前述实施例的方法的步骤。

本发明实施例提供一种具有处理器可执行的非易失的程序代码的计算机可读介质,该程序代码使处理器执行上述实施例提供的方法的步骤。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以用软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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