一种碰撞测试及其检测方法、设备与存储介质与流程

未命名 08-26 阅读:97 评论:0


1.本发明涉及计算机的技术领域,尤其涉及一种碰撞测试及其检测方法、设备与存储介质。


背景技术:

2.在功能性游戏、社交应用、购物应用等应用程序中,会设计独立的虚拟地图,虚拟地图多为简单的瓦片地图,用户可以控制虚拟角色在该虚拟地图中进行游戏、社交、购物等活动。
3.在用户控制虚拟角色移动的过程中,虚拟角色可能与其他移动的虚拟角色发生碰撞,因此,需要实时检测两个虚拟角色之间是否发生碰撞,当检测到两个虚拟角色之间发生碰撞事件时,可以在回调中处理碰撞事件。
4.但是,在瓦片地图中一般将虚拟角色当成一个质点进行移动,在碰撞检测时是使用该质点检测是否发生碰撞,由于质点偏离虚拟角色在ui(user interface,用户界面)的视觉上呈现的姿态,可能会出现判断质点并未发生碰撞,在视觉上虚拟角色发生碰撞的情况,导致碰撞检测的精确度较低。


技术实现要素:

5.本发明提供了一种碰撞测试及其检测方法、设备与存储介质,以解决如何提高在瓦片地图中检测虚拟角色之间是否发生碰撞的精确度的问题。
6.根据本发明的一方面,提供了一种碰撞测试方法,包括:
7.在瓦块地图编辑器中编辑虚拟地图,所述虚拟地图划分为多个网格,所述虚拟地图中编辑有处于移动状态的非玩家角色;
8.在对所述虚拟地图测试时,在所述虚拟地图中加载用户控制的玩家角色;
9.若接收到针对所述玩家角色触发的移动操作,则在多个所述网格中对所述玩家角色规划规避当前所述非玩家角色的路径;
10.在控制所述玩家角色沿所述路径移动的过程中,对所述玩家角色与所述非玩家角色提取在所述虚拟地图中可视的特征,作为可视化特征;
11.依据所述可视化特征检测所述非玩家角色与所述玩家角色之间是否发生可视化的碰撞;
12.将所述玩家角色与所述非玩家角色之间发生可视化的碰撞的信息写入测试报告中。
13.根据本发明的另一方面,提供了一种碰撞检测方法,包括:
14.在进入指定的虚拟地图时,加载所述虚拟地图以及在所述虚拟地图中加载用户控制的玩家角色,所述虚拟地图划分为多个网格,所述虚拟地图中编辑有处于移动状态的非玩家角色;
15.若接收到针对所述玩家角色触发的移动操作,则在多个所述网格中对所述玩家角
色规划规避当前所述非玩家角色的路径;
16.在控制所述玩家角色沿所述路径移动的过程中,对所述玩家角色与所述非玩家角色提取在所述虚拟地图中可视的特征,作为可视化特征;
17.依据所述可视化特征检测所述非玩家角色与所述玩家角色之间是否发生可视化的碰撞。
18.根据本发明的另一方面,提供了一种电子设备,所述电子设备包括:
19.至少一个处理器;以及
20.与所述至少一个处理器通信连接的存储器;其中,
21.所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的碰撞测试方法或碰撞检测方法。
22.根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于使处理器执行时实现本发明任一实施例所述的碰撞测试方法或碰撞检测方法。
23.在本实施例中,在瓦块地图编辑器中编辑虚拟地图,虚拟地图划分为多个网格,虚拟地图中编辑有处于移动状态的非玩家角色;在对虚拟地图测试时,在虚拟地图中加载用户控制的玩家角色;若接收到针对玩家角色触发的移动操作,则在多个网格中对玩家角色规划规避当前非玩家角色的路径;在控制玩家角色沿路径移动的过程中,对玩家角色与非玩家角色提取在虚拟地图中可视的特征,作为可视化特征;依据可视化特征检测非玩家角色与玩家角色之间是否发生可视化的碰撞;将玩家角色与非玩家角色之间发生可视化的碰撞的信息写入测试报告中。本实施例针对玩家角色与非玩家角色进行碰撞检测,可以降低碰撞检测的频次,降低碰撞检测消耗的资源,并且,依赖玩家角色与非玩家角色的可视化特征可以检测出非玩家角色与玩家角色之间是否发生可视化的碰撞,在碰撞检测中保持玩家角色与非玩家角色在视觉上的特性,减少出现判断玩家角色与非玩家角色未发生碰撞,但在视觉上发生碰撞的情况,从而提高碰撞检测的精确度。
24.应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
25.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
26.图1是根据本发明实施例一提供的一种碰撞测试方法的流程图;
27.图2是根据本发明实施例一提供的一种编辑虚拟地图的示例图;
28.图3是根据本发明实施例一提供的一种路径的示例图;
29.图4是根据本发明实施例一提供的一种测试提示的示例图;
30.图5是根据本发明实施例二提供的一种碰撞测试方法的流程图;
31.图6是根据本发明实施例三提供的一种碰撞检测方法的流程图;
32.图7是根据本发明实施例四提供的一种碰撞测试装置的结构示意图;
33.图8是根据本发明实施例五提供的一种碰撞检测装置的结构示意图;
34.图9是实现本发明实施例六提供的一种电子设备的结构示意图。
具体实施方式
35.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
36.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
37.实施例一
38.图1为本发明实施例一提供的一种碰撞测试方法的流程图,本实施例可适用于编辑瓦片地图并在瓦片地图中对虚拟角色之间是否发生碰撞进行测试情况,该方法可以由碰撞测试装置来执行,该碰撞测试装置可以采用硬件和/或软件的形式实现,该碰撞测试装置可配置于电子设备中。如图1所示,该方法包括:
39.步骤101、在瓦块地图编辑器中编辑虚拟地图。
40.在实际应用中,在功能性游戏、社交应用、购物应用等应用程序中,技术人员会依据业务场景的需求开发独立的虚拟地图,例如,在功能性游戏中,技术人员可开发多款虚拟地图,供用户以玩游戏的形式学习知识,在社交应用中,技术人员可开发多款诸如农场等虚拟地图,供用户以玩游戏的形式与其他用户社交,在购物应用中,技术人员可开发养殖场、虚拟街道等形式虚拟地图,供用户以玩游戏的形式参加积分、团购等促销,等等。
41.例如,如图2所示,不同的应用程序具有不同的开发方式,在开发应用程序的过程中,可以依据应用程序的开发方式选用合适的瓦片地图编辑器编辑虚拟地图,即,虚拟地图属于瓦片地图,格式多为格式可以为tmx,可划分为多个网格,网格的形状可以为规范的矩形(尤其为正方形)、六边形等。
42.例如,某款功能性游戏使用引擎引擎cocos creator开发,地图编辑器编辑的虚拟地图依赖cocos creator支持,因此,可选择瓦片地图编辑器tiledmap。
43.一般情况下,虚拟地图包含地图层、对象层、瓦片图块、瓦片、对象等模块,每一个模块都可以设置自定义的属性值(custom properties),例如,给网格设置“碰撞检测”属性、给对象层的某一对象设置“敌人类型”属性等等,这些自定义的属性可以在瓦片地图编辑器中进行设置,并且可以在代码中获取这些属性以及对应的属性值。
44.其中,“碰撞检测”的属性可用于寻路、移动,该属性可以包括不可移动(即障碍
物)、可移动等。
45.此外,技术人员还可以根据业务场景的需求开发虚拟角色、并定义为非玩家角色(non-player character,npc),即,不受用户操纵的游戏角色,例如,小动物,机器人,等等,非玩家角色配置有移动规则,例如,移动的方向、单次移动的距离、停顿的时间,等等,非玩家角色持续或在特定的时间应用该移动规则在虚拟地图中移动,即,在虚拟地图中编辑有处于移动状态的非玩家角色。
46.步骤102、在对虚拟地图测试时,在虚拟地图中加载用户控制的玩家角色。
47.在技术人员完成编辑虚拟地图之后,可以对虚拟地图进行各种测试,其中一项测试为碰撞检测,此时,可以在虚拟地图中加载用户可控制的虚拟角色,并定义为玩家角色,该玩家角色可以包括卡通人物、小动物、机器人等等。
48.步骤103、若接收到针对玩家角色触发的移动操作,则在多个网格中对玩家角色规划规避当前非玩家角色的路径。
49.在实际应用中,虚拟地图可提供多种针对玩家角色触发移动操作的方式,该方式可以为用户手动触发,也可以为应用程序自动触发,例如,用户在虚拟点击地图中点击某个位置,则可以以该位置为终点、触发移动操作,或者,应用程序提供自动寻路功能,用户在应用程序(含当前虚拟地图或其他虚拟地图)点击某个控件(如表示任务、人物的控件),通过任务、对话场景等方式调用自动寻路功能、触发移动操作,或者,玩家角色与非玩家角色发生可视化的碰撞之后,重新触发移动操作,等等。
50.在测试的场景中,技术人员可以手动针对玩家角色触发的移动操作,也可以编写测试用例或脚本,针对玩家角色触发的移动操作,等等,本实施例对此不加以限制。
51.如图3所示,如果接收到针对玩家角色触发的移动操作,则可以按照该移动操作的指示,在虚拟地图的多个网格中对玩家角色规划规避当前非玩家角色的路径,即,该路径由网格组成,该路径可以以箭头、虚线等方式显示、有可以隐藏,本实施例对此不加以限制。
52.进一步而言,由于非玩家角色(如图3中的牛)处于移动状态,即,非玩家角色占据可移动的位置,且该网格是实时变化的,因此,每当接收到针对玩家角色(如图3中的卡通人物)触发的移动操作时,重新定位非玩家角色占据的网格,从而规避非玩家角色。
53.当然,虚拟地图中自身定义其他固定的地图元素作为障碍物,如山、树、河流等,对玩家角色规划的路径除了规避当前非玩家角色之外,也硬规避其他障碍物。
54.在本发明的一个实施例中,步骤103可以包括如下步骤:
55.步骤1031、在玩家角色简化为质点的情况下,在虚拟地图中定位玩家角色当前所占据的网格,作为第一目标格。
56.一般情况下,为便于在瓦片地图中规划路径,可以实时将玩家角色简化为质点,一个质点占据一个网格。
57.示例性地,可以查询内容为玩家角色的玩家图像数据,将玩家图像数据的中心点设置为质点。
58.那么,在玩家角色简化为质点的情况下,在虚拟地图中定位玩家角色当前所占据的网格,记为第一目标格,即,第一目标格为起点。
59.步骤1032、在虚拟地图中定位移动操作指示的终点当前所占据的网格,作为第二目标格。
60.由于移动操作的触发方式有所不同,相应地,移动操作指示的终点也有所不同,例如,用户点击的位置为终点,在任务、对话场景中设置固定的位置(如某个虚拟物品的位置、某个虚拟角色的位置)作为终点,等等。
61.在虚拟地图中,可定位移动操作指示的终点当前所占据的网格,作为第二目标格,即,第二目标格为终点。
62.步骤1033、在非玩家角色简化为质点的情况下,在虚拟地图中定位非玩家角色当前所占据的网格,作为第三目标格。
63.步骤1034、将第三目标表格标记障碍物。
64.一般情况下,为便于在瓦片地图中规划路径,可以实时将非玩家角色简化为质点,一个质点占据一个网格。
65.示例性地,可以查询内容为非玩家角色的非玩家图像数据,在非玩家图像数据中去除无效区域,获得有效图像数据,其中,无效区域为非玩家角色中与碰撞无关的虚拟元素所处的区域,将有效图像数据的中心点设置为质点。
66.那么,在非玩家角色简化为质点的情况下,在虚拟地图中定位非玩家角色当前所占据的网格,作为第三目标格。
67.由于非玩家角色当前处于第三目标格,表示第三目标格在虚拟地图中的属性为可移动,但由于非玩家角色当前占据第三目标格,因而可以将第三目标格在虚拟地图中的属性从可移动变更为不可移动,记为障碍物。
68.步骤1035、在虚拟地图中的各个网格中,寻找从第一目标格出发、规避障碍物到达第二目标格的路径。
69.在已知起点、终点、障碍物、可移动的网格的情况下,可以使用a
*
、贪心算法、dijkstra算法(迪杰斯特拉算法)、b
*
等寻路算法,在虚拟地图中的各个网格,寻找出一条或多条可从第一目标格出发、规避障碍物到达第二目标格的路径。
70.以a
*
算法为例,在虚拟地图中已划分网格,作为搜索区域,把搜索区域简化为2维数组。数组的每一项代表一个网格,它的状态就是可移动(walkalbe)和不可移动(unwalkable),将距离最短作为搜索的目标,按照顺序搜索出从起点达到终点的网格,记为路径。
71.a
*
算法存在两个表格,一个是开放列表(openlist),记录下所有被考虑来寻找最短路径的网格的列表,一个是关闭列表(closelist),记录下不会再被考虑的网格的列表。
72.从起点a开始遍历网格,把它就加入到openlist中,openlist里的网格是路径可能会是沿途经过的,也有可能不经过,可视为一个待检查的网格的列表。
73.重复如下过程:
74.遍历openlist,查找路径增量f最小的网格,其中,f=g+h,其中,g为从起点a到当前网格的移动量,h为从当前网格到终点的移动量估算值。
75.把当前网格节点移到closelist。
76.针对当前网格相邻的其他网格,如果它是不可移动(unwalkable)的网格(比如,水,山,树木,非玩家角色等)的或者它在closelist中,忽略它。
77.如果它不在openlist中,把它加入openlist,并且把当前网格设置为它的父节点,记录该网格的f、g和h值。
78.如果它已经在openlist中,检查这条路径(即经由当前方格到达它那里)是否更好,用g值作参考。更小的g值表示这是更好的路径。如果是这样,把它的父节点设置为当前网格,并重新计算它的g和f值。
79.当终点加入到了openlist中,此时路径已经找到了,或者,查找终点失败,并且openlist是空的,此时没有路径。
80.从终点开始,每个网格沿着父节点移动直至起点,记为路径。
81.步骤104、在控制玩家角色沿路径移动的过程中,对玩家角色与非玩家角色提取在虚拟地图中可视的特征,作为可视化特征。
82.在虚拟地图中,非玩家角色处于移动状态,按照既定的移动规则在虚拟地图中的各个网格,为提高非玩家角色的仿真度,移动规则多使用一些随机的算法,例如,随机选择移动的方向、随机选择单次移动的距离,等等,针对玩家角色规划路径之后,非玩家角色通常离开规划路径时所处的网格,移动至其他网格,可能经过该路径,因此,在玩家角色按照路径移动时,可能存在一定概率、与非玩家角色发生碰撞。
83.对此,在控制玩家角色沿路径移动的过程中,可以持续对玩家角色与非玩家角色提取一些在虚拟地图中可视的、且与碰撞相关特征,记为可视化特征。
84.在本发明的一个实施例中,可视化特征包括玩家区域、非玩家区域、距离与前进范围;则在本实施例中,步骤104可以包括如下步骤:
85.步骤1041、在虚拟地图中识别玩家角色当前覆盖的多个网格、作为玩家区域,识别非玩家角色当前覆盖的多个网格,作为非玩家区域。
86.一般情况下,玩家角色的大小大于单个网格的大小,非玩家角色的大小大于单个网格的大小。
87.为化简玩家角色与非玩家角色、方便碰撞检测的运算,可以在虚拟地图中实时识别玩家角色当前覆盖的多个网格、作为玩家区域,玩家区域可以在大体上表示玩家角色,作为可视化特征。
88.此外,可以在虚拟地图中实时识别非玩家角色当前覆盖的多个网格,作为非玩家区域,非玩家区域可以在大体上表示非玩家角色,作为可视化特征。
89.在实际应用中,可以在应用程序本地查询内容为玩家角色的玩家图像数据、内容为非玩家角色的非玩家图像数据,在玩家图像数据中,除了玩家角色之外,其他多为透明的像素点,用户不可视,在玩家图像数据,除了非玩家角色之外,其他多为透明的像素点,用户不可视。
90.由于玩家角色受用户控制,在应用程序中以游戏的方式进行操作,有可能存在多个状态,在玩家角色的基础上添加一些诸如道具等虚拟元素,其形象发生一定的变化,而这些变化较为有限,且具有较多透明的像素点,对碰撞检测的影响较少,因此,为便于碰撞检测的运算,可以查询内容为非玩家角色的多帧原始图像数据。
91.若某帧原始图像数据未添加除玩家角色之外的其他虚拟元素,即,该帧原始图像数据记录玩家角色的原始状态,则可以提取该帧原始图像数据为玩家图像数据。
92.部分非玩家图像数据,可能存在无效区域,其中,无效区域为非玩家角色中与碰撞无关的虚拟元素(如尾巴等)所处的区域,无效区域中具有较多透明的像素点,对碰撞检测存在干扰,即,玩家角色与非玩家角色中的该虚拟元素(如尾巴等)并不会在视觉上发生明
显的碰撞事件,因此,可以在非玩家图像数据中去除无效区域,获得有效图像数据,排除对碰撞检测的干扰。
93.对玩家图像数据的大小与网格的大小之间的比值向下取整,获得第一数量,在虚拟地图中围绕玩家图像数据的第一中心点填充满足第一数量的网格,获得玩家区域,即,在玩家图像数据的第一中心点的基础上,向四周填充满足第一数量的网格,获得玩家区域,玩家区域多为规则的矩形,玩家区域的长宽比与玩家图像数据的长宽比相近。
94.对有效图像数据的大小与网格的大小之间的比值向下取整,获得第二数量,在虚拟地图中围绕有效图像数据的第二中心点填充满足第二数量的网格,获得非玩家区域,即,在有效图像数据的第二中心点的基础上,向四周填充满足第一数量的网格,获得非玩家区域,非玩家区域多为规则的矩形,非玩家区域的长宽比与有效图像数据的长宽比相近。
95.一般情况下,玩家图像数据的大小与网格的大小之间的比值、有效图像数据的大小与网格的大小之间的比值均为小数,并非整数,对比值向下取整,忽略了小数部分,玩家区域并不会完全覆盖玩家角色,玩家角色可能具有部分像素点凸出玩家区域,非玩家区域并不会完全覆盖非玩家角色,非玩家角色可能具有部分像素点凸出非玩家区域,这些凸出玩家区域、非玩家区域的像素点多为玩家角色、非玩家角色边缘的像素点,这些像素点并不会在视觉上发生明显的碰撞事件,可减少对碰撞检测的干扰。
96.为便于测试,可以在应用程序或测试用例中添加测试代码,在测试的过程中,调用测试代码,添加与玩家区域大小、位置均相同的第一图层(如图4中位于卡通人物之下的色块)、与非玩家区域大小、位置均相同的第二图层(如图4中位于猪之下的色块、位于牛之上的色块)。
97.其中,第一图层可以位于玩家角色之上、也可以位于玩家角色之下,第二图层可以位于非玩家角色之上、也可以位于非玩家角色之下。
98.第一图层填充第一颜色,第二图层填充第二颜色,第一颜色与第二颜色可以相同,也可以不同。
99.此外,测试代码在玩家角色与非玩家角色之间发生可视化的碰撞时,将第一颜色更改为第三颜色,第一颜色与第三颜色不同。
100.这样子可以清晰看到各个动态的障碍物(即非玩家角色)的大小与位置是否正确,碰撞检测是否正确,更方便调试与发现碰撞检测的bug(漏洞)
101.若测试代码位于应用程序中、且完成测试,则将测试代码添加注释,以忽略测试代码,保证应用程序的正常运行。
102.当然,除了添加注释、忽略测试代码之外,还可以直接将测试代码删除,本实施例对此不加以限制。
103.步骤1042、计算玩家区域与非玩家区域之间当前在虚拟地图中间隔的距离。
104.针对玩家区域与非玩家区域,可以计算玩家区域与非玩家区域之间当前在整体上、在虚拟地图中间隔的距离,作为可视化特征。
105.其中,该距离可以为实际距离、也可以为编辑距离,本实施例对此不加以限制。
106.示例性地,定位玩家区域的第一中心点、非玩家区域的第二中心点;
107.使用欧式距离等函数计算第一中心点与第二中心点之间的距离,作为玩家区域与非玩家区域之间当前在虚拟地图中间隔的距离。
108.步骤1043、识别玩家角色当前在虚拟地图中沿路径移动时形成的前进范围。
109.在视觉上,玩家角色与非玩家角色发生碰撞,应当是发生在玩家角色的前进方向,在除前进方向的其他方向发生碰撞大多是不合理的,因此,可以识别玩家角色当前在虚拟地图中沿路径移动时形成的前进范围,作为可视化特征,其中,前进范围表示在视觉上玩家角色的前进方向的集合。
110.在具体实现中,识别玩家角色当前在虚拟地图中所处的网格,作为第一候选格,识别玩家角色当前在虚拟地图中沿路径移动时、位于第一候选格下一位的网格,作为第二候选格。
111.将第一候选格指向第二候选格的方向设置为玩家角色当前在虚拟地图中的前进方向,
112.在移动方向的基础上向两侧各扩展指定的角度(如30
°
),获得玩家角色当前在虚拟地图中沿路径移动时形成的前进范围。
113.当然,上述可视化特征只是作为示例,在实施本实施例时,可以根据实际情况设置其它可视化特征,本实施例对此不加以限制。另外,除了上述可视化特征外,本领域技术人员还可以根据实际需要采用其它可视化特征,本实施例对此也不加以限制。
114.步骤105、依据可视化特征检测非玩家角色与玩家角色之间是否发生可视化的碰撞。
115.在本实施例中,可以依据可视化特征检测非玩家角色与玩家角色之间是否发生可视化的碰撞,即,在视觉上是否发生碰撞。
116.在具体实现中,在可视化特征包括表征玩家角色的玩家区域、表征非玩家角色的非玩家区域、玩家区域与非玩家区域之间间隔的距离、玩家角色的前进范围时,可以依据表征玩家角色的玩家区域、表征非玩家角色的非玩家区域、玩家区域与非玩家区域之间间隔的距离、玩家角色的前进范围检测非玩家角色与玩家角色之间是否发生可视化的碰撞。
117.一方面,可以调用应用程序中提供的接口(如游戏引擎的接口),检测玩家区域与非玩家区域是否重叠。
118.另一方面,可以对非玩家角色与玩家角色设置阈值,并将距离与阈值进行比较。
119.其中,该阈值可以为针对非玩家角色与玩家角色设置的、默认的经验值,也可以为实时针对非玩家角色与玩家角色更新的数值,本实施例对此不加以限制。
120.示例性地,对玩家区域添加第一最小外接圆、对非玩家区域添加第二最小外接圆,将第一最小外接矩形的半径与第二最小外接矩形的半径求和,作为阈值,该阈值表示对非玩家角色与玩家角色发生可视化的碰撞时最大的距离。
121.又一方面,检测非玩家区域是否在前进范围内。
122.若玩家区域与非玩家区域存在重叠、距离小于或等于阈值、且非玩家区域在前进范围内,则确定玩家角色与非玩家角色之间发生可视化的碰撞。
123.由于玩家角色、非玩家角色之外存在一些透明的像素点,这些像素点在视觉上会干扰碰撞检测,本实施例通过多个维度下的可视化特征进行碰撞检测,可以进一步提高碰撞检测的精确度。
124.步骤106、将玩家角色与非玩家角色之间发生可视化的碰撞的信息写入测试报告中。
125.在玩家角色与非玩家角色之间发生可视化的碰撞时,可以读取相关的信息,例如,玩家角色的id、非玩家角色的id、发生可视化碰撞的坐标、发生可视化碰撞的时间、对玩家角色规划的路径,等等,将这些信息写入测试报告中,等待技术人员分析碰撞检测是否满足预期。
126.在应用程序完成所有测试时,通过指定的渠道(如应用商城、更新)发布应用程序,用户可以在该渠道下载并安装应用程序。
127.在本实施例中,在瓦块地图编辑器中编辑虚拟地图,虚拟地图划分为多个网格,虚拟地图中编辑有处于移动状态的非玩家角色;在对虚拟地图测试时,在虚拟地图中加载用户控制的玩家角色;若接收到针对玩家角色触发的移动操作,则在多个网格中对玩家角色规划规避当前非玩家角色的路径;在控制玩家角色沿路径移动的过程中,对玩家角色与非玩家角色提取在虚拟地图中可视的特征,作为可视化特征;依据可视化特征检测非玩家角色与玩家角色之间是否发生可视化的碰撞;将玩家角色与非玩家角色之间发生可视化的碰撞的信息写入测试报告中。本实施例针对玩家角色与非玩家角色进行碰撞检测,可以降低碰撞检测的频次,降低碰撞检测消耗的资源,并且,依赖玩家角色与非玩家角色的可视化特征可以检测出非玩家角色与玩家角色之间是否发生可视化的碰撞,在碰撞检测中保持玩家角色与非玩家角色在视觉上的特性,减少出现判断玩家角色与非玩家角色未发生碰撞,但在视觉上发生碰撞的情况,从而提高碰撞检测的精确度。
128.实施例二
129.图5为本发明实施例二提供的一种碰撞测试方法的流程图,本实施例在实施例的基础上增加了弹开玩家角色的操作。如图5所示,该方法包括:
130.步骤501、在瓦块地图编辑器中编辑虚拟地图。
131.其中,虚拟地图划分为多个网格,虚拟地图中编辑有处于移动状态的非玩家角色。
132.步骤502、在对虚拟地图测试时,在虚拟地图中加载用户控制的玩家角色。
133.步骤503、若接收到针对玩家角色触发的移动操作,则在多个网格中对玩家角色规划规避当前非玩家角色的路径。
134.步骤504、在控制玩家角色沿路径移动的过程中,对玩家角色与非玩家角色提取在虚拟地图中可视的特征,作为可视化特征。
135.步骤505、依据可视化特征检测非玩家角色与玩家角色之间是否发生可视化的碰撞。
136.步骤506、若玩家角色与非玩家角色之间发生可视化的碰撞,则将玩家角色移动至目标位置。
137.如果确认玩家角色与非玩家角色之间发生可视化的碰撞,则可以通过随机移动、反方向移动等方式将玩家角色移动至目标位置,其中,目标位置为除玩家角色发生可视化的碰撞所处位置之外的其他位置,实现将玩家角色弹开的效果,符合玩家角色与非玩家角色发生碰撞之后的合理变化。
138.示例性地,识别与玩家角色发生可视化的碰撞时的前进方向相反的方向,作为目标方向,在预设的移动范围内随机抽取一个数值,作为长度,沿目标方向将玩家角色移动至该长度之外的目标位置,即,玩家角色发生可视化的碰撞所处位置指向目标位置的方向为目标方向,玩家角色发生可视化的碰撞所处位置与目标位置之间间隔该长度的距离。
139.步骤507、在维持终点不变的条件下,针对玩家角色触发新的移动操作,返回执行步骤503。
140.由于将玩家角色发生可视化的碰撞所处位置移动至目标位置,偏离了原有的路径,使得该路径失效,此时,可以让玩家角色在目标位置停留预设的时间段,在超过该时间段之后,维持终点不变,在此条件下,针对玩家角色触发新的移动操作,返回执行步骤503,重新在多个网格中对玩家角色规划规避当前非玩家角色的路径。
141.重新规划路径时,会刷新非玩家角色占据的网格,且玩家角色已移动至目标位置,可以在一定程度上降低玩家角色与非玩家角色重复碰撞的概率。
142.步骤508、将玩家角色与非玩家角色之间发生可视化的碰撞的信息写入测试报告中。
143.实施例三
144.图6为本发明实施例三提供的一种碰撞检测方法的流程图,本实施例可适用于在瓦片地图中检测虚拟角色之间是否发生碰撞情况,该方法可以由碰撞检测装置来执行,该碰撞检测装置可以采用硬件和/或软件的形式实现,该碰撞检测装置可配置于个人电脑、笔记本电脑、移动终端(如手机、平板电脑等)等电子设备中。如图6所示,该方法包括:
145.步骤601、在进入指定的虚拟地图时,加载虚拟地图以及在虚拟地图中加载用户控制的玩家角色。
146.在电子设备中可以安装windows、android(安卓)、ios、harmony(鸿蒙)等操作系统,在这些操作系统中可以安装多种应用程序,例如,功能性游戏、社交应用、购物应用,等等。
147.这些应用程序具有一份或多份虚拟地图,用户在应用程序中进行操作,进入某份虚拟地图时,可以加载虚拟地图以及在虚拟地图中加载用户控制的玩家角色。
148.其中,虚拟地图划分为多个网格,虚拟地图中编辑有处于移动状态的非玩家角色。
149.步骤602、若接收到针对玩家角色触发的移动操作,则在多个网格中对玩家角色规划规避当前非玩家角色的路径。
150.在本发明的一个实施例中,步骤602可以包括如下步骤:
151.在玩家角色简化为质点的情况下,在虚拟地图中定位玩家角色当前所占据的网格,作为第一目标格;
152.在虚拟地图中定位移动操作指示的终点当前所占据的网格,作为第二目标格;
153.在非玩家角色简化为质点的情况下,在虚拟地图中定位非玩家角色当前所占据的网格,作为第三目标格;
154.将第三目标表格标记障碍物;在虚拟地图中的各个网格中,寻找从第一目标格出发、规避障碍物到达第二目标格的路径。
155.步骤603、在控制玩家角色沿路径移动的过程中,对玩家角色与非玩家角色提取在虚拟地图中可视的特征,作为可视化特征。
156.在本发明的一个实施例中,可视化特征包括玩家区域、非玩家区域、距离与前进范围;则在本实施例中,步骤603可以包括如下步骤:
157.在虚拟地图中识别玩家角色当前覆盖的多个网格、作为玩家区域,识别非玩家角色当前覆盖的多个网格,作为非玩家区域;
158.计算玩家区域与非玩家区域之间当前在虚拟地图中间隔的距离;
159.识别玩家角色当前在虚拟地图中沿路径移动时形成的前进范围。
160.进一步地,在虚拟地图中识别玩家角色当前覆盖的多个网格、作为玩家区域,识别非玩家角色当前覆盖的多个网格,作为非玩家区域,包括:
161.查询内容为玩家角色的玩家图像数据、内容为非玩家角色的非玩家图像数据;
162.在非玩家图像数据中去除无效区域,获得有效图像数据,无效区域为非玩家角色中与碰撞无关的虚拟元素所处的区域;
163.对玩家图像数据的大小与网格的大小之间的比值向下取整,获得第一数量;
164.在虚拟地图中围绕玩家图像数据的第一中心点填充满足第一数量的网格,获得玩家区域;
165.对有效图像数据的大小与网格的大小之间的比值向下取整,获得第二数量;
166.在虚拟地图中围绕有效图像数据的第二中心点填充满足第二数量的网格,获得非玩家区域。
167.进一步地,查询内容为玩家角色的玩家图像数据、内容为非玩家角色的非玩家图像数据,包括:
168.查询内容为非玩家角色的多帧原始图像数据;
169.若某帧原始图像数据未添加除玩家角色之外的其他虚拟元素,则提取原始图像数据为玩家图像数据。
170.进一步地,计算玩家区域与非玩家区域之间当前在虚拟地图中间隔的距离,包括:
171.定位玩家区域的第一中心点、非玩家区域的第二中心点;
172.计算第一中心点与第二中心点之间的距离,作为玩家区域与非玩家区域之间当前在虚拟地图中间隔的距离。
173.进一步地,识别玩家角色当前在虚拟地图中沿路径移动时形成的前进范围,包括:
174.识别玩家角色当前在虚拟地图中所处的网格,作为第一候选格;
175.识别玩家角色当前在虚拟地图中沿路径移动时、位于第一候选格下一位的网格,作为第二候选格;
176.将第一候选格指向第二候选格的方向设置为玩家角色当前在虚拟地图中的前进方向;
177.在前进方向的基础上向两侧扩展指定的角度,获得玩家角色当前在虚拟地图中沿路径移动时形成的前进范围。
178.步骤604、依据可视化特征检测非玩家角色与玩家角色之间是否发生可视化的碰撞。
179.在本发明的一个实施例中,步骤604可以包括如下步骤:
180.检测玩家区域与非玩家区域是否重叠;
181.对非玩家角色与玩家角色设置阈值;
182.将距离与阈值进行比较;
183.检测非玩家区域是否在前进范围内;
184.若玩家区域与非玩家区域存在重叠、距离小于或等于阈值、且非玩家区域在前进范围内,则确定玩家角色与非玩家角色之间发生可视化的碰撞。
185.进一步地,对非玩家角色与玩家角色设置阈值,包括:
186.对玩家区域添加第一最小外接圆、对非玩家区域添加第二最小外接圆;
187.将第一最小外接矩形的半径与第二最小外接矩形的半径求和,作为阈值。
188.在本发明的一个实施例中,该方法还可以包括如下步骤:
189.若运行至测试代码且所述测试代码具有注释,则忽略所述测试代码,其中,所述测试代码用于添加与所述玩家区域相同的第一图层、与所述非玩家区域相同的第二图层,所述第一图层填充第一颜色,所述第二图层填充第二颜色,以及,在所述玩家角色与所述非玩家角色之间发生可视化的碰撞时,将所述第一颜色更改为第三颜色。
190.在本发明的一个实施例中,该方法还可以包括如下步骤:
191.若玩家角色与非玩家角色之间发生可视化的碰撞,则将玩家角色移动至目标位置,目标位置为除玩家角色发生可视化的碰撞所处位置之外的其他位置;
192.在维持终点不变的条件下,针对玩家角色触发新的移动操作,返回执行若接收到针对玩家角色触发的移动操作,则在虚拟地图中对玩家角色规划规避当前非玩家角色的路径。
193.进一步地,将玩家角色移动至目标位置,包括:
194.识别与玩家角色发生可视化的碰撞时的前进方向相反的方向,作为目标方向;
195.在预设的移动范围内随机抽取一个数值,作为长度;
196.沿目标方向将玩家角色移动至长度外的目标位置。
197.在本实施例中,由于碰撞检测与实施例一、实施例二的应用基本相似,所以描述的比较简单,相关之处参见实施例一、实施例二的部分说明即可,本实施例在此不加以详述。
198.在本实施例中,在进入指定的虚拟地图时,加载虚拟地图以及在虚拟地图中加载用户控制的玩家角色,虚拟地图划分为多个网格,虚拟地图中编辑有处于移动状态的非玩家角色;若接收到针对玩家角色触发的移动操作,则在多个网格中对玩家角色规划规避当前非玩家角色的路径;在控制玩家角色沿路径移动的过程中,对玩家角色与非玩家角色提取在虚拟地图中可视的特征,作为可视化特征;依据可视化特征检测非玩家角色与玩家角色之间是否发生可视化的碰撞。本实施例针对玩家角色与非玩家角色进行碰撞检测,可以降低碰撞检测的频次,降低碰撞检测消耗的资源,并且,依赖玩家角色与非玩家角色的可视化特征可以检测出非玩家角色与玩家角色之间是否发生可视化的碰撞,在碰撞检测中保持玩家角色与非玩家角色在视觉上的特性,减少出现判断玩家角色与非玩家角色未发生碰撞,但在视觉上发生碰撞的情况,从而提高碰撞检测的精确度。
199.实施例四
200.图7为本发明实施例四提供的一种碰撞测试装置的结构示意图。如图7所示,该装置包括:
201.虚拟地图编辑模块701,用于在瓦块地图编辑器中编辑虚拟地图,所述虚拟地图划分为多个网格,所述虚拟地图中编辑有处于移动状态的非玩家角色;
202.玩家角色加载模块702,用于在对所述虚拟地图测试时,在所述虚拟地图中加载用户控制的玩家角色;
203.寻路模块703,用于若接收到针对所述玩家角色触发的移动操作,则在多个所述网格中对所述玩家角色规划规避当前所述非玩家角色的路径;
204.可视化特征提取模块704,用于在控制所述玩家角色沿所述路径移动的过程中,对所述玩家角色与所述非玩家角色提取在所述虚拟地图中可视的特征,作为可视化特征;
205.可视化碰撞检测模块705,用于依据所述可视化特征检测所述非玩家角色与所述玩家角色之间是否发生可视化的碰撞;
206.测试报告生成模块706,用于将所述玩家角色与所述非玩家角色之间发生可视化的碰撞的信息写入测试报告中。
207.在本发明的一个实施例中,所述寻路模块703包括:
208.第一目标格定位模块,用于在所述玩家角色简化为质点的情况下,在所述虚拟地图中定位所述玩家角色当前所占据的所述网格,作为第一目标格;
209.第二目标格定位模块,用于在所述虚拟地图中定位所述移动操作指示的终点当前所占据的所述网格,作为第二目标格;
210.第三目标格定位模块,用于在所述非玩家角色简化为质点的情况下,在所述虚拟地图中定位所述非玩家角色当前所占据的所述网格,作为第三目标格;
211.障碍物标记模块,用于将所述第三目标表格标记障碍物;
212.路径规划模块,用于在所述虚拟地图中的各个所述网格中,寻找从所述第一目标格出发、规避所述障碍物到达所述第二目标格的路径。
213.在本发明的一个实施例中,所述可视化特征包括玩家区域、非玩家区域、距离与前进范围;
214.所述可视化特征提取模块704包括:
215.区域识别模块,用于在所述虚拟地图中识别所述玩家角色当前覆盖的多个所述网格、作为玩家区域,识别所述非玩家角色当前覆盖的多个所述网格,作为非玩家区域;
216.区域距离计算模块,用于计算所述玩家区域与所述非玩家区域之间当前在所述虚拟地图中间隔的距离;
217.前进范围识别模块,用于识别所述玩家角色当前在所述虚拟地图中沿所述路径移动时形成的前进范围。
218.在本发明的一个实施例中,所述区域识别模块包括:
219.图像数据查询模块,用于查询内容为所述玩家角色的玩家图像数据、内容为所述非玩家角色的非玩家图像数据;
220.无效区域去除模块,用于在所述非玩家图像数据中去除无效区域,获得有效图像数据,所述无效区域为所述非玩家角色中与碰撞无关的虚拟元素所处的区域;
221.第一数量计算模块,用于对所述玩家图像数据的大小与所述网格的大小之间的比值向下取整,获得第一数量;
222.玩家区域生成模块,用于在所述虚拟地图中围绕所述玩家图像数据的第一中心点填充满足所述第一数量的所述网格,获得玩家区域;
223.第二数量计算模块,用于对所述有效图像数据的大小与所述网格的大小之间的比值向下取整,获得第二数量;
224.非玩家区域生成模块,用于在所述虚拟地图中围绕所述有效图像数据的第二中心点填充满足所述第二数量的所述网格,获得非玩家区域。
225.在本发明的一个实施例中,所述图像数据查询模块包括:
226.原始图像数据查询模块,用于查询内容为所述非玩家角色的多帧原始图像数据;
227.玩家图像数据提取模块,用于若某帧所述原始图像数据未添加除所述玩家角色之外的其他虚拟元素,则提取所述原始图像数据为玩家图像数据。
228.在本发明的一个实施例中,所述区域距离计算模块包括:
229.中心点定位模块,用于定位所述玩家区域的第一中心点、所述非玩家区域的第二中心点;
230.中心点距离计算模块,用于计算所述第一中心点与所述第二中心点之间的距离,作为所述玩家区域与所述非玩家区域之间当前在所述虚拟地图中间隔的距离。
231.在本发明的一个实施例中,所述前进范围识别模块包括:
232.第一候选格识别模块,用于识别所述玩家角色当前在所述虚拟地图中所处的所述网格,作为第一候选格;
233.第二候选格识别模块,用于识别所述玩家角色当前在所述虚拟地图中沿所述路径移动时、位于所述第一候选格下一位的所述网格,作为第二候选格;
234.前进方向设置模块,用于将所述第一候选格指向所述第二候选格的方向设置为所述玩家角色当前在所述虚拟地图中的前进方向;
235.前进方向扩展模块,用于在所述前进方向的基础上向两侧扩展指定的角度,获得所述玩家角色当前在所述虚拟地图中沿所述路径移动时形成的前进范围。
236.在本发明的一个实施例中,所述可视化碰撞检测模块705包括:
237.区域重叠检测模块,用于检测所述玩家区域与所述非玩家区域是否重叠;
238.阈值设置模块,用于对所述非玩家角色与所述玩家角色设置阈值;
239.距离比较模块,用于将所述距离与所述阈值进行比较;
240.前进范围检测模块,用于检测所述非玩家区域是否在所述前进范围内;
241.碰撞确定模块,用于若所述玩家区域与所述非玩家区域存在重叠、所述距离小于或等于所述阈值、且所述非玩家区域在所述前进范围内,则确定所述玩家角色与所述非玩家角色之间发生可视化的碰撞。
242.在本发明的一个实施例中,所述阈值设置模块包括:
243.最小外接圆添加模块,用于对所述玩家区域添加第一最小外接圆、对所述非玩家区域添加第二最小外接圆;
244.半径求和模块,用于将所述第一最小外接矩形的半径与所述第二最小外接矩形的半径求和,作为阈值。
245.在本发明的一个实施例中,还包括:
246.测试代码调用模块,用于调用测试代码,添加与所述玩家区域相同的第一图层、与所述非玩家区域相同的第二图层,所述第一图层填充第一颜色,所述第二图层填充第二颜色,以及,在所述玩家角色与所述非玩家角色之间发生可视化的碰撞时,将所述第一颜色更改为第三颜色;
247.注释添加模块,用于若完成测试,则将所述测试代码添加注释,以忽略所述测试代码。
248.在本发明的一个实施例中,还包括:
249.玩家角色移动模块,用于若所述玩家角色与所述非玩家角色之间发生可视化的碰
撞,则将所述玩家角色移动至目标位置,所述目标位置为除所述玩家角色发生可视化的碰撞所处位置之外的其他位置;
250.移动操作触发模块,用于在维持终点不变的条件下,针对所述玩家角色触发新的移动操作,返回执行所述寻路模块703。
251.在本发明的一个实施例中,所述玩家角色移动模块包括:
252.目标方向识别模块,用于识别与所述玩家角色发生可视化的碰撞时的前进方向相反的方向,作为目标方向;
253.长度抽取模块,用于在预设的移动范围内随机抽取一个数值,作为长度;
254.目标位置移动模块,用于沿所述目标方向将所述玩家角色移动至所述长度外的目标位置。
255.本发明实施例所提供的碰撞测试装置可执行本发明任意实施例所提供的碰撞测试方法,具备执行碰撞测试方法相应的功能模块和有益效果。
256.实施例五
257.图8为本发明实施例五提供的一种碰撞检测装置的结构示意图。如图8所示,该装置包括:
258.地图元素加载模块801,用于在进入指定的虚拟地图时,加载所述虚拟地图以及在所述虚拟地图中加载用户控制的玩家角色,所述虚拟地图划分为多个网格,所述虚拟地图中编辑有处于移动状态的非玩家角色;
259.寻路模块802,用于若接收到针对所述玩家角色触发的移动操作,则在多个所述网格中对所述玩家角色规划规避当前所述非玩家角色的路径;
260.可视化特征提取模块803,用于在控制所述玩家角色沿所述路径移动的过程中,对所述玩家角色与所述非玩家角色提取在所述虚拟地图中可视的特征,作为可视化特征;
261.可视化碰撞检测模块804,用于依据所述可视化特征检测所述非玩家角色与所述玩家角色之间是否发生可视化的碰撞。
262.在本发明的一个实施例中,所述寻路模块802包括:
263.第一目标格定位模块,用于在所述玩家角色简化为质点的情况下,在所述虚拟地图中定位所述玩家角色当前所占据的所述网格,作为第一目标格;
264.第二目标格定位模块,用于在所述虚拟地图中定位所述移动操作指示的终点当前所占据的所述网格,作为第二目标格;
265.第三目标格定位模块,用于在所述非玩家角色简化为质点的情况下,在所述虚拟地图中定位所述非玩家角色当前所占据的所述网格,作为第三目标格;
266.障碍物标记模块,用于将所述第三目标表格标记障碍物;
267.路径规划模块,用于在所述虚拟地图中的各个所述网格中,寻找从所述第一目标格出发、规避所述障碍物到达所述第二目标格的路径。
268.在本发明的一个实施例中,所述可视化特征包括玩家区域、非玩家区域、距离与前进范围;
269.所述可视化特征提取模块803包括:
270.区域识别模块,用于在所述虚拟地图中识别所述玩家角色当前覆盖的多个所述网格、作为玩家区域,识别所述非玩家角色当前覆盖的多个所述网格,作为非玩家区域;
271.区域距离计算模块,用于计算所述玩家区域与所述非玩家区域之间当前在所述虚拟地图中间隔的距离;
272.前进范围识别模块,用于识别所述玩家角色当前在所述虚拟地图中沿所述路径移动时形成的前进范围。
273.在本发明的一个实施例中,所述区域识别模块包括:
274.图像数据查询模块,用于查询内容为所述玩家角色的玩家图像数据、内容为所述非玩家角色的非玩家图像数据;
275.无效区域去除模块,用于在所述非玩家图像数据中去除无效区域,获得有效图像数据,所述无效区域为所述非玩家角色中与碰撞无关的虚拟元素所处的区域;
276.第一数量计算模块,用于对所述玩家图像数据的大小与所述网格的大小之间的比值向下取整,获得第一数量;
277.玩家区域生成模块,用于在所述虚拟地图中围绕所述玩家图像数据的第一中心点填充满足所述第一数量的所述网格,获得玩家区域;
278.第二数量计算模块,用于对所述有效图像数据的大小与所述网格的大小之间的比值向下取整,获得第二数量;
279.非玩家区域生成模块,用于在所述虚拟地图中围绕所述有效图像数据的第二中心点填充满足所述第二数量的所述网格,获得非玩家区域。
280.在本发明的一个实施例中,所述图像数据查询模块包括:
281.原始图像数据查询模块,用于查询内容为所述非玩家角色的多帧原始图像数据;
282.玩家图像数据提取模块,用于若某帧所述原始图像数据未添加除所述玩家角色之外的其他虚拟元素,则提取所述原始图像数据为玩家图像数据。
283.在本发明的一个实施例中,所述区域距离计算模块包括:
284.中心点定位模块,用于定位所述玩家区域的第一中心点、所述非玩家区域的第二中心点;
285.中心点距离计算模块,用于计算所述第一中心点与所述第二中心点之间的距离,作为所述玩家区域与所述非玩家区域之间当前在所述虚拟地图中间隔的距离。
286.在本发明的一个实施例中,所述前进范围识别模块包括:
287.第一候选格识别模块,用于识别所述玩家角色当前在所述虚拟地图中所处的所述网格,作为第一候选格;
288.第二候选格识别模块,用于识别所述玩家角色当前在所述虚拟地图中沿所述路径移动时、位于所述第一候选格下一位的所述网格,作为第二候选格;
289.前进方向设置模块,用于将所述第一候选格指向所述第二候选格的方向设置为所述玩家角色当前在所述虚拟地图中的前进方向;
290.前进方向扩展模块,用于在所述前进方向的基础上向两侧扩展指定的角度,获得所述玩家角色当前在所述虚拟地图中沿所述路径移动时形成的前进范围。
291.在本发明的一个实施例中,所述可视化碰撞检测模块804包括:
292.区域重叠检测模块,用于检测所述玩家区域与所述非玩家区域是否重叠;
293.阈值设置模块,用于对所述非玩家角色与所述玩家角色设置阈值;
294.距离比较模块,用于将所述距离与所述阈值进行比较;
295.前进范围检测模块,用于检测所述非玩家区域是否在所述前进范围内;
296.碰撞确定模块,用于若所述玩家区域与所述非玩家区域存在重叠、所述距离小于或等于所述阈值、且所述非玩家区域在所述前进范围内,则确定所述玩家角色与所述非玩家角色之间发生可视化的碰撞。
297.在本发明的一个实施例中,所述阈值设置模块包括:
298.最小外接圆添加模块,用于对所述玩家区域添加第一最小外接圆、对所述非玩家区域添加第二最小外接圆;
299.半径求和模块,用于将所述第一最小外接矩形的半径与所述第二最小外接矩形的半径求和,作为阈值。
300.在本发明的一个实施例中,还包括:
301.玩家角色移动模块,用于若所述玩家角色与所述非玩家角色之间发生可视化的碰撞,则将所述玩家角色移动至目标位置,所述目标位置为除所述玩家角色发生可视化的碰撞所处位置之外的其他位置;
302.移动操作触发模块,用于在维持终点不变的条件下,针对所述玩家角色触发新的移动操作,返回执行所述寻路模块802。
303.在本发明的一个实施例中,所述玩家角色移动模块包括:
304.目标方向识别模块,用于识别与所述玩家角色发生可视化的碰撞时的前进方向相反的方向,作为目标方向;
305.长度抽取模块,用于在预设的移动范围内随机抽取一个数值,作为长度;
306.目标位置移动模块,用于沿所述目标方向将所述玩家角色移动至所述长度外的目标位置。
307.在本发明的一个实施例中,还包括:
308.测试代码忽略模块,用于若运行至测试代码且所述测试代码具有注释,则忽略所述测试代码,其中,所述测试代码用于添加与所述玩家区域相同的第一图层、与所述非玩家区域相同的第二图层,所述第一图层填充第一颜色,所述第二图层填充第二颜色,以及,在所述玩家角色与所述非玩家角色之间发生可视化的碰撞时,将所述第一颜色更改为第三颜色。
309.本发明实施例所提供的碰撞检测装置可执行本发明任意实施例所提供的碰撞检测方法,具备执行碰撞检测方法相应的功能模块和有益效果。
310.实施例六
311.图9示出了可以用来实施本发明的实施例的电子设备10的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
312.如图9所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(rom)12、随机访问存储器(ram)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(rom)12中的计
算机程序或者从存储单元18加载到随机访问存储器(ram)13中的计算机程序,来执行各种适当的动作和处理。在ram 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、rom 12以及ram 13通过总线14彼此相连。输入/输出(i/o)接口15也连接至总线14。
313.电子设备10中的多个部件连接至i/o接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
314.处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,如碰撞测试方法或碰撞检测方法。
315.在一些实施例中,碰撞测试方法或碰撞检测方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由rom 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到ram 13并由处理器11执行时,可以执行上文描述的碰撞测试方法或碰撞检测方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行碰撞测试方法或碰撞检测方法。
316.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
317.用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
318.在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
319.为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
320.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)、区块链网络和互联网。
321.计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务中,存在的管理难度大,业务扩展性弱的缺陷。
322.实施例七
323.本发明实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序在被处理器执行时实现如本发明任一实施例所提供的碰撞测试方法或碰撞检测方法。
324.计算机程序产品在实现的过程中,可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言,诸如java、smalltalk、c++,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
325.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
326.上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

技术特征:
1.一种碰撞测试方法,其特征在于,包括:在瓦块地图编辑器中编辑虚拟地图,所述虚拟地图划分为多个网格,所述虚拟地图中编辑有处于移动状态的非玩家角色;在对所述虚拟地图测试时,在所述虚拟地图中加载用户控制的玩家角色;若接收到针对所述玩家角色触发的移动操作,则在多个所述网格中对所述玩家角色规划规避当前所述非玩家角色的路径;在控制所述玩家角色沿所述路径移动的过程中,对所述玩家角色与所述非玩家角色提取在所述虚拟地图中可视的特征,作为可视化特征;依据所述可视化特征检测所述非玩家角色与所述玩家角色之间是否发生可视化的碰撞;将所述玩家角色与所述非玩家角色之间发生可视化的碰撞的信息写入测试报告中。2.根据权利要求1所述的方法,其特征在于,所述在多个所述网格中对所述玩家角色规划规避当前所述非玩家角色的路径,包括:在所述玩家角色简化为质点的情况下,在所述虚拟地图中定位所述玩家角色当前所占据的所述网格,作为第一目标格;在所述虚拟地图中定位所述移动操作指示的终点当前所占据的所述网格,作为第二目标格;在所述非玩家角色简化为质点的情况下,在所述虚拟地图中定位所述非玩家角色当前所占据的所述网格,作为第三目标格;将所述第三目标表格标记障碍物;在所述虚拟地图中的各个所述网格中,寻找从所述第一目标格出发、规避所述障碍物到达所述第二目标格的路径。3.根据权利要求1所述的方法,其特征在于,所述可视化特征包括玩家区域、非玩家区域、距离与前进范围;所述对所述玩家角色与所述非玩家角色提取在所述虚拟地图中可视的特征,作为可视化特征,包括:在所述虚拟地图中识别所述玩家角色当前覆盖的多个所述网格、作为玩家区域,识别所述非玩家角色当前覆盖的多个所述网格,作为非玩家区域;计算所述玩家区域与所述非玩家区域之间当前在所述虚拟地图中间隔的距离;识别所述玩家角色当前在所述虚拟地图中沿所述路径移动时形成的前进范围。4.根据权利要求3所述的方法,其特征在于,所述在所述虚拟地图中识别所述玩家角色当前覆盖的多个所述网格、作为玩家区域,识别所述非玩家角色当前覆盖的多个所述网格,作为非玩家区域,包括:查询内容为所述玩家角色的玩家图像数据、内容为所述非玩家角色的非玩家图像数据;在所述非玩家图像数据中去除无效区域,获得有效图像数据,所述无效区域为所述非玩家角色中与碰撞无关的虚拟元素所处的区域;对所述玩家图像数据的大小与所述网格的大小之间的比值向下取整,获得第一数量;在所述虚拟地图中围绕所述玩家图像数据的第一中心点填充满足所述第一数量的所
述网格,获得玩家区域;对所述有效图像数据的大小与所述网格的大小之间的比值向下取整,获得第二数量;在所述虚拟地图中围绕所述有效图像数据的第二中心点填充满足所述第二数量的所述网格,获得非玩家区域。5.根据权利要求4所述的方法,其特征在于,所述查询内容为所述玩家角色的玩家图像数据、内容为所述非玩家角色的非玩家图像数据,包括:查询内容为所述非玩家角色的多帧原始图像数据;若某帧所述原始图像数据未添加除所述玩家角色之外的其他虚拟元素,则提取所述原始图像数据为玩家图像数据。6.根据权利要求3所述的方法,其特征在于,所述计算所述玩家区域与所述非玩家区域之间当前在所述虚拟地图中间隔的距离,包括:定位所述玩家区域的第一中心点、所述非玩家区域的第二中心点;计算所述第一中心点与所述第二中心点之间的距离,作为所述玩家区域与所述非玩家区域之间当前在所述虚拟地图中间隔的距离。7.根据权利要求3所述的方法,其特征在于,所述识别所述玩家角色当前在所述虚拟地图中沿所述路径移动时形成的前进范围,包括:识别所述玩家角色当前在所述虚拟地图中所处的所述网格,作为第一候选格;识别所述玩家角色当前在所述虚拟地图中沿所述路径移动时、位于所述第一候选格下一位的所述网格,作为第二候选格;将所述第一候选格指向所述第二候选格的方向设置为所述玩家角色当前在所述虚拟地图中的前进方向;在所述前进方向的基础上向两侧扩展指定的角度,获得所述玩家角色当前在所述虚拟地图中沿所述路径移动时形成的前进范围。8.根据权利要求3所述的方法,其特征在于,所述依据所述可视化特征检测所述玩家角色与所述非玩家角色之间是否发生可视化的碰撞,包括:检测所述玩家区域与所述非玩家区域是否重叠;对所述非玩家角色与所述玩家角色设置阈值;将所述距离与所述阈值进行比较;检测所述非玩家区域是否在所述前进范围内;若所述玩家区域与所述非玩家区域存在重叠、所述距离小于或等于所述阈值、且所述非玩家区域在所述前进范围内,则确定所述玩家角色与所述非玩家角色之间发生可视化的碰撞。9.根据权利要求8所述的方法,其特征在于,所述对所述非玩家角色与所述玩家角色设置阈值,包括:对所述玩家区域添加第一最小外接圆、对所述非玩家区域添加第二最小外接圆;将所述第一最小外接矩形的半径与所述第二最小外接矩形的半径求和,作为阈值。10.根据权利要求3所述的方法,其特征在于,还包括:调用测试代码,添加与所述玩家区域相同的第一图层、与所述非玩家区域相同的第二图层,所述第一图层填充第一颜色,所述第二图层填充第二颜色,以及,在所述玩家角色与
所述非玩家角色之间发生可视化的碰撞时,将所述第一颜色更改为第三颜色;若完成测试,则将所述测试代码添加注释,以忽略所述测试代码。11.根据权利要求1-10中任一项所述的方法,其特征在于,还包括:若所述玩家角色与所述非玩家角色之间发生可视化的碰撞,则将所述玩家角色移动至目标位置,所述目标位置为除所述玩家角色发生可视化的碰撞所处位置之外的其他位置;在维持终点不变的条件下,针对所述玩家角色触发新的移动操作,返回执行所述若接收到针对所述玩家角色触发的移动操作,则在所述虚拟地图中对所述玩家角色规划规避当前所述非玩家角色的路径。12.根据权利要求11所述的方法,其特征在于,所述将所述玩家角色移动至目标位置,包括:识别与所述玩家角色发生可视化的碰撞时的前进方向相反的方向,作为目标方向;在预设的移动范围内随机抽取一个数值,作为长度;沿所述目标方向将所述玩家角色移动至所述长度外的目标位置。13.一种碰撞检测方法,其特征在于,包括:在进入指定的虚拟地图时,加载所述虚拟地图以及在所述虚拟地图中加载用户控制的玩家角色,所述虚拟地图划分为多个网格,所述虚拟地图中编辑有处于移动状态的非玩家角色;若接收到针对所述玩家角色触发的移动操作,则在多个所述网格中对所述玩家角色规划规避当前所述非玩家角色的路径;在控制所述玩家角色沿所述路径移动的过程中,对所述玩家角色与所述非玩家角色提取在所述虚拟地图中可视的特征,作为可视化特征;依据所述可视化特征检测所述非玩家角色与所述玩家角色之间是否发生可视化的碰撞。14.一种电子设备,其特征在于,所述电子设备包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-12中任一项所述的碰撞测试方法或权利要求13所述的碰撞检测方法。15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于使处理器执行时实现权利要求1-12中任一项所述的碰撞测试方法或权利要求13所述的碰撞检测方法。

技术总结
本发明公开了一种碰撞测试及其检测方法、设备与存储介质,该碰撞测试方法包括:在瓦块地图编辑器中编辑虚拟地图;在对虚拟地图测试时,在虚拟地图中加载用户控制的玩家角色;若接收到针对玩家角色触发的移动操作,则在多个网格中对玩家角色规划规避当前非玩家角色的路径;在控制玩家角色沿路径移动的过程中,对玩家角色与非玩家角色提取在虚拟地图中可视的特征,作为可视化特征;依据可视化特征检测非玩家角色与玩家角色之间是否发生可视化的碰撞;将玩家角色与非玩家角色之间发生可视化的碰撞的信息写入测试报告中。本实施例在碰撞检测中保持玩家角色与非玩家角色在视觉上的特性,从而提高碰撞检测的精确度。从而提高碰撞检测的精确度。从而提高碰撞检测的精确度。


技术研发人员:赖玮 严泽涛 桂景祁
受保护的技术使用者:广州盈风网络科技有限公司
技术研发日:2023.05.23
技术公布日:2023/8/23
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐