一种基于空间索引的游戏对象可视化搜索方法技术

技术编号:35925601 阅读:31 留言:0更新日期:2022-12-10 11:17
本发明专利技术公开了一种基于空间索引的游戏对象可视化搜索方法,包括如下步骤:S1、在C#层中构建四叉树的根节点,并设置一棵树的对象;S2、在C#层中构建四叉树的子节点,子节点分为数据域和关系域;S3、将待检索的对象输入到Lua层中进行检测,待检索的对象与其他对象发生碰撞时,输出碰撞状态;S4、在Lua层中设置可视化工具,通过可视化工具设置地图检测范围,并通过可视化工具观测物体是否发生碰撞以及物体当前位置位于四叉树的深度;本发明专利技术实现了可视化的四叉树搜索,提高了游戏内对组件的搜索效率以及游戏内组件碰撞检测,可将时间复杂度从O(n)降到O(logn)。(n)降到O(logn)。(n)降到O(logn)。

【技术实现步骤摘要】
一种基于空间索引的游戏对象可视化搜索方法


[0001]本专利技术涉及计算机
,特别涉及一种基于空间索引的游戏对象可视化搜索方法。

技术介绍

[0002]在游戏场景中,常需要频繁对场景上的N个单位进行搜索和碰撞检测,现有的搜索方法一般采用穷举搜索,这种搜索方法有很大的弊端。采用穷举搜索,时间复杂度为O(n),而这样的复杂度随着场景的单位越来越多,搜索和碰撞检测将会使游戏卡顿,很难满足实际使用需求。

技术实现思路

[0003]为解决上述问题,本专利技术提供了一种基于空间索引的游戏对象可视化搜索方法。
[0004]本专利技术采用以下技术方案:
[0005]一种基于空间索引的游戏对象可视化搜索方法,包括如下步骤:
[0006]S1、在C#层中构建四叉树的根节点,并设置一棵树的对象;
[0007]S2、在C#层中构建四叉树的子节点,子节点分为数据域和关系域;
[0008]S3、将待检索的对象输入到Lua层中进行检测,待检索的对象与其他对象发生碰撞时,输出碰撞状态;
[0009]S4、在Lua层中设置可视化工具,通过可视化工具设置地图检测范围,并通过可视化工具观测物体是否发生碰撞以及物体当前位置位于四叉树的深度。
[0010]优选地,步骤S1中所述对象包括树的一个根节点、游戏地图大小的包围盒、地图的最大深度、最大的叶子数、节点字典和节点的id,其中,根节点用于控制所有叶子节点和存储数据。
[0011]优选地,步骤S2中所述数据域用于存放节点的数据,所述关系域用于存放树的关系,树的关系包括父节点、子节点和当前节点的深度。
[0012]优选地,步骤S2具体包括如下步骤:
[0013]S21、以当前节点为中心,划分出等大的四个区域,所画出的四个区域作为新的子节点,每个新节点的深度为当前节点深度加一,将当前节点的对象插入对应的子节点中;
[0014]S22、从根节点开始,若当前节点无子节点,便将对象插入当前节点;若当前节点存在子节点,并且子节点的范围能将对象完全覆盖,将对象插入子节点当中,进行递归操作;若对象占据了多个象限的范围,则将对象存储在当前节点;若当前节点的对象存储值超过设定的最大值时,分裂当前节点;
[0015]S23、根据检索对象,设置范围,从根节点起,若四个象限的范围与给定的范围重叠,且重叠的象限还有子节点,则递归检索子节点,直至最后一层,并返回最后一层节点的所有元素;若给定的范围超出四个象限的范围,则提示不在搜索范围内,用户再重新设置搜索范围。
[0016]优选地,步骤S3具体包括如下步骤:
[0017]S31、初始化四叉树,设置四叉树的检索范围;
[0018]S32、将待检索的对象插入到四叉树中,给节点设置自己的id;
[0019]S33、更新对象所属区域位置,当与其他对象发生碰撞时,输出碰撞状态为进入碰撞、持续碰撞或分离;
[0020]S34、某个单位移除碰撞器组件时,往C#层的QuadTree移除这个孩子节点;
[0021]S35、释放四叉树,并清理对应的C#层的QuadTree。
[0022]优选地,步骤S31还包括修改对象的检索范围,增大对象的检测区域。
[0023]采用上述技术方案后,本专利技术与
技术介绍
相比,具有如下优点:
[0024]1、本专利技术采用的四叉树结构比较简单,并且当空间数据对象分布比较均匀时,具有比较高的空间数据插入和查询效率,可根据其较高的空间数据插入和查询效率的优点,实现了可视化的四叉树搜索,提高了游戏内对组件的搜索效率以及游戏内组件碰撞检测。
[0025]2、本专利技术的四叉树可作为对象管理器使用,采用了四叉树就不需要额外再创建对象管理器,可提高搜索效率和运行效率。
[0026]3、本专利技术的四叉树搜索,是根据对象在区域里的位置来搜索,采用分而治之思想,时间复杂度只与四叉树的深度有关,相比穷举搜索,本专利技术的搜索方法在区域里的对象越多时,效果越明显,可将时间复杂度从O(n)降到O(logn)。
附图说明
[0027]图1为本专利技术的方法流程图;
[0028]图2为本专利技术的可视化工具查看碰撞时的示意图;
[0029]图3为本专利技术的可视化工具查看物体位置在四叉树深度的示意图;
[0030]图4为本专利技术的可视化工具设置搜索范围的示意图。
具体实施方式
[0031]为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。
[0032]实施例
[0033]如图4所示,一种基于空间索引的游戏对象可视化搜索方法,包括如下步骤:
[0034]S1、在C#层中构建四叉树的根节点,并设置一棵树的对象;
[0035]步骤S1中所述对象包括树的一个根节点、游戏地图大小的包围盒、地图的最大深度、最大的叶子数、节点字典和节点的id,其中,根节点用于控制所有叶子节点和存储数据;
[0036]S2、在C#层中构建四叉树的子节点,子节点分为数据域和关系域;
[0037]步骤S2中所述数据域用于存放节点的数据,所述关系域用于存放树的关系,树的关系包括父节点、子节点和当前节点的深度;
[0038]步骤S2具体包括如下步骤:
[0039]S21、以当前节点为中心,划分出等大的四个区域,所画出的四个区域作为新的子节点,每个新节点的深度为当前节点深度加一,将当前节点的对象插入对应的子节点中;
[0040]S22、从根节点开始,若当前节点无子节点,便将对象插入当前节点;若当前节点存在子节点,并且子节点的范围能将对象完全覆盖,将对象插入子节点当中,进行递归操作;若对象占据了多个象限的范围,则将对象存储在当前节点;若当前节点的对象存储值超过设定的最大值时,分裂当前节点;
[0041]S23、根据检索对象,设置范围,从根节点起,若四个象限的范围与给定的范围重叠,且重叠的象限还有子节点,则递归检索子节点,直至最后一层,并返回最后一层节点的所有元素;若给定的范围超出四个象限的范围,则提示不在搜索范围内,用户再重新设置搜索范围;
[0042]S3、将待检索的对象输入到Lua层中进行检测,待检索的对象与其他对象发生碰撞时,输出碰撞状态;
[0043]步骤S3具体包括如下步骤:
[0044]S31、初始化四叉树,设置四叉树的检索范围;还包括修改对象的检索范围,增大对象的检测区域;
[0045]S32、将待检索的对象插入到四叉树中,给节点设置自己的id;
[0046]S33、更新对象所属区域位置,当与其他对象发生碰撞时,输出碰撞状态为进入碰撞、持续碰撞或分离;
[0047]S34、某个单位移除碰撞器组件时,往C#层的QuadTree移除这个孩子节点;
[0048]S35、释放四叉树,并清理对应的C#层的Qu本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于空间索引的游戏对象可视化搜索方法,其特征在于:包括如下步骤:S1、在C#层中构建四叉树的根节点,并设置一棵树的对象;S2、在C#层中构建四叉树的子节点,子节点分为数据域和关系域;S3、将待检索的对象输入到Lua层中进行检测,待检索的对象与其他对象发生碰撞时,输出碰撞状态;S4、在Lua层中设置可视化工具,通过可视化工具设置地图检测范围,并通过可视化工具观测物体是否发生碰撞以及物体当前位置位于四叉树的深度。2.如权利要求1所述的一种基于空间索引的游戏对象可视化搜索方法,其特征在于:步骤S1中所述对象包括树的一个根节点、游戏地图大小的包围盒、地图的最大深度、最大的叶子数、节点字典和节点的id,其中,根节点用于控制所有叶子节点和存储数据。3.如权利要求1所述的一种基于空间索引的游戏对象可视化搜索方法,其特征在于:步骤S2中所述数据域用于存放节点的数据,所述关系域用于存放树的关系,树的关系包括父节点、子节点和当前节点的深度。4.如权利要求3所述的一种基于空间索引的游戏对象可视化搜索方法,其特征在于,步骤S2具体包括如下步骤:S21、以当前节点为中心,划分出等大的四个区域,所画出的四个区域作为新的子节点,每个新节点的深度为当前节点深度加一,将当前节点的对象插入对应的子节点...

【专利技术属性】
技术研发人员:李金明陈毓榕
申请(专利权)人:厦门极致互动网络技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1