一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于地图编辑器对可编辑对象查找的方法及其系统与流程

2022-07-22 23:41:19 来源:中国专利 TAG:


1.本发明涉及游戏编辑操作技术领域,特别是一种基于地图编辑器对可编辑对象查找的方法及其系统。


背景技术:

2.在大型游戏设计中,一张地图中会看到很多怪物,玩家,地贴,路,花,草,树,木等物件,这里我们统称为可编辑物件,在承受住同屏渲染压力后,美术以及客户端人员在制作游戏的过程中就要在这些游戏场景中对某一具体物件进行详细的设定了(如位置,大小,旋转角度,光照,纹理等)
3.现在大多地图关卡编辑器的选择物件都是根据用户手点的鼠标位置,然后遍历地图上所有的可编辑对象,并对对象的坐标进行匹配,这样极端情况下,可能要遍历整张地图对所有可编辑的对象进行坐标点匹配,极大的消耗了系统的性能,并浪费了制作人员的时间,甚至有可能在地图角色众多时形成卡顿。
4.《地图编辑器》是一种所见即所得的游戏地图制作工具,它辅助设计和输出地图数据,包括创建、编辑、存储和管理游戏地图数据。地图编辑器读取和使用游戏资源,并按照游戏程序规约输出相应格式的地图数据,游戏程序(客户端和服务器)通过地图数据构建游戏场景,将其呈现给用户。


技术实现要素:

5.为克服上述问题,本发明的目的是提供一种基于地图编辑器对可编辑对象查找的方法,通过对地图区域进行四叉树划分,极大的提高了游戏制作效率。
6.本发明采用以下方案实现:一种基于地图编辑器对可编辑对象查找的方法,所述方法包括如下步骤:
7.步骤s1、在地图编辑器中新建一张地图;
8.步骤s2、在地图编辑器中设定四叉树节点的最小矩形的宽度和高度;
9.步骤s3、操作人员要查找一物件时,获取选的物件需要遍历的层数,该层数即为四叉树的深度;
10.步骤s4、构建四叉树,将树的唯一序号tid作为四叉树的第一个参数,将父节点的唯一序号oid作为四叉树的第二个参数,记录节点所覆盖的矩阵范围大小作为四叉树的第三个参数,记录节点所隶属的深度大小作为四叉树的第四个参数;
11.步骤s5、当物件位置改变时动态更新当前的树节点;将更新后的树节点作为新的四叉树;
12.步骤s6、从新的四叉树中获取到这个编辑对象,即完成物件的编辑对象的查找。
13.进一步的,所述方法还包括:步骤s8、对查找到的编辑对象进行编辑操作。
14.进一步的,步骤s3进一步具体为:操作人员要查找一物件时,获取选的物件需要遍历的层数,设置获取的层数为n层,则第n层的节点数量m和最小矩形的宽度相乘的值一定要
大于等于地图的宽度;或者第n层的节点数量m和最小矩形的高度相乘的值要大于等于地图的高度。
15.进一步的,步骤s5进一步具体为:在地图编辑器中物件移动后,从一个区域移动到另一个区域,每当物件的坐标发生变化,判断物件是否还隶属于父节点的节点下方的范围内,否,则要更新物件所属的节点以及所属的父节点下方节点;是,则要更新物件所属的节点;更新树节点是个递归过程,从旧节点上移出去,添加到新节点上,子节点更新后还要更新父节点,直至遍历到新旧节点的父节点为止。
16.本发明还提供了一种基于地图编辑器对可编辑对象查找的系统,所述系统包括新建地图模块、矩形设置模块、深度遍历模块、四叉树构建模块、更新节点模块、以及编辑对象获取模块;
17.所述新建地图模块,用于在地图编辑器中新建一张地图;
18.所述矩形设置模块,在地图编辑器中设定四叉树节点的最小矩形的宽度和高度;
19.所述深度遍历模块,操作人员要查找一物件时,获取选的物件需要遍历的层数,该层数即为四叉树的深度;
20.所述四叉树构建模块,用于构建四叉树,将树的唯一序号tid作为四叉树的第一个参数,将父节点的唯一序号oid作为四叉树的第二个参数,记录节点所覆盖的矩阵范围大小作为四叉树的第三个参数,记录节点所隶属的深度大小作为四叉树的第四个参数;
21.所述更新节点模块,用于当物件位置改变时动态更新当前的树节点;将更新后的树节点作为新的四叉树;
22.所述编辑对象获取模块,从新的四叉树中获取到这个编辑对象,即完成物件的编辑对象的查找。
23.进一步的,所述系统还包括编辑操作模块,所述编辑操作模块,用于对查找到的编辑对象进行编辑操作。
24.进一步的,所述深度遍历模块的实现方式进一步具体为:操作人员要查找一物件时,获取选的物件需要遍历的层数,设置获取的层数为n层,则第n层的节点数量m和最小矩形的宽度相乘的值一定要大于等于地图的宽度;或者第n层的节点数量m和最小矩形的高度相乘的值要大于等于地图的高度。
25.进一步的,所述更新节点模块的实现方式进一步具体为:在地图编辑器中物件移动后,从一个区域移动到另一个区域,每当物件的坐标发生变化,判断物件是否还隶属于父节点的节点下方的范围内,否,则要更新物件所属的节点以及所属的父节点下方节点;是,则要更新物件所属的节点;更新树节点是个递归过程,从旧节点上移出去,添加到新节点上,子节点更新后还要更新父节点,直至遍历到新旧节点的父节点为止。
26.本发明的有益效果在于:在地图编辑器中,通过对地图区域进行四叉树划分,无需去考虑对象数量的多少,只需要考虑对游戏制作人员选定的鼠标点周围一定范围下面的四叉树节点的所有可编辑对象,极大的提高了游戏制作效率。
附图说明
27.图1是本发明的方法流程示意图。
28.图2是本发明的方法一实施例中地图下方建立的四叉树结构示意图。
29.图3是本发明的方法一实施例中物件房子添加到四叉树节点中的示意图。
30.图4是本发明的方法一实施例中操作人员选中2-0编号的物件后需进行遍历四叉树的结构示意图。
31.图5是本发明的系统原理框图。
具体实施方式
32.下面结合附图对本发明做进一步说明。
33.请参阅图1所示,本发明的一种基于地图编辑器对可编辑对象查找的方法,所述方法包括如下步骤:
34.步骤s1、在地图编辑器中新建一张地图;
35.步骤s2、在地图编辑器中设定四叉树节点的最小矩形的宽度和高度;
36.步骤s3、操作人员要查找一物件时,获取选的物件需要遍历的层数,该层数即为四叉树的深度;
37.步骤s4、构建四叉树,将树的唯一序号tid作为四叉树的第一个参数,将父节点的唯一序号oid作为四叉树的第二个参数,记录节点所覆盖的矩阵范围大小作为四叉树的第三个参数,记录节点所隶属的深度大小作为四叉树的第四个参数;
38.步骤s5、当物件位置改变时动态更新当前的树节点;将更新后的树节点作为新的四叉树;
39.步骤s6、从新的四叉树中获取到这个编辑对象,即完成物件的编辑对象的查找。
40.步骤s8、对查找到的编辑对象进行编辑操作。
41.下面结合一具体实施例对本发明做进一步说明:
42.1.在地图编辑器中新建一张大地图,如图2中的第一层;
43.2、设定四叉树节点的最小矩形宽度和高度,默认设置为假设为5像素(默认宽高大小一致的矩形),通常以游戏中比较常用的小物件(这里5像素根据游戏中常用的草丛做为参考)做为参考;
44.3、操作人员要查找一物件时,获取选的物件需要遍历的层数,该层数即为四叉树的深度,如图3的三层结构;树的深度即这个树有多少层节点,也可以简单理解为树的层数;
45.首先假设有n层,那么第n层的节点数量m和最小矩形的宽度相乘的值一定要大于等于地图的宽度(步骤1中所建地图的宽度);
46.或者说第n层的节点数量m和最小矩形的高度相乘的值要大于等于地图的高度(步骤1中所建地图的高度),很好理解,但是要有取舍,取地图宽高的最大值来作为比较对象,这样才能覆盖整个地图区域,不会出现漏掉的区域。
47.4、创建四叉树,每个四叉树包含了4个参数;
48.为了方便获取四叉树对象,把树的唯一id(tid)作为了第一个参数,
49.为了记录父节点的信息,将父节点的唯一id(oid)作为第二个参数;
50.第三个参数是必须存在的,记录了该节点所覆盖的矩形范围大小;
51.第四个参数也是很必要的,记录了该节点所隶属的深度大小;
52.每当完成一个节点信息(节点信息在地图编辑器中每日的游戏编辑器中的物件,比如一个房子,一个桥)的设置,就要把他添加到树中,如图3。
53.5、物件移动时动态更新当前的树节点;
54.在地图编辑器中物件移动后,从一个区域移动到另一个区域,每当物件的坐标发生变化,都需要去更新他是否还隶属于当前的节点范围内,判断物件是否还隶属于父节点的节点下方的范围内,否,则要更新物件所属的节点以及所属的父节点下方节点;是,则要更新物件所属的节点;
55.6、更新节点是个递归过程,从旧节点上移出去,添加到新节点上,子节点更新后还要更新父节点,直至遍历到新旧节点的父节点为止。例如:在地图编辑器中物件移动后,从一个区域移动到另一个区域,每当物件的坐标发生变化,都需要去更新他是否还隶属于当前的节点范围内,如果不在当前节点范围,就要去更新他所属的节点以及所属的父节点下方节点;在当前节点范围,则更新他所属的节点(即物件移动到四叉树下的节点);因为是地图编辑器,物件在地图中的位置是可以随着用户编辑物件的位置发生改变,如图4,如子节点2-0本来隶属于父节点1-0,但用户可以通过位置更改2-0的位置后,则2-0可以移到1-1的下面会重新生成一个新的节点假设为^2-0,作为1-1的子节点,这时要同时刷新1-0及1-1下的子节点(即更新他所属的节点以及所属的父节点下方节点);因为这时1-0少了子节点2-0,1-1多了一个子节点^2-0,位置改变通常是指用户更改物件位置通常是更改物件的坐标,拖动操作本质上也是改变物件的位置;又如:如子节点2-0本来隶属于父节点1-0,但用户可以通过位置更改2-0的位置后,则2-0可以移到3-0的下面会重新生成一个新的节点假设为^2-0,作为1-0的子节点,这时只要刷新1-0下的子节点(即更新他所属的节点);更新节点是个递归过程,从旧节点上移出去,添加到新节点上,子节点更新后还要更新父节点,直至遍历到新旧节点的父节点为止;例如:因为位置改变后,会重新生成一个新的节点^2-0,旧节点则是2-0,但他们本质上是同一物件,只是位置不一样,所以在四叉树中所属父节点不一样,地图中所有物件都有一个唯一的id号来表示,所以看是不是同一个点并不是根据坐标,坐标是用来规划物件在地图中的位置,来方便查找。所以新旧节点是同一个,就是根据物件id来搜索,因为用户移动的物件时是知道当前物件id的,移动后也要同步更新新旧节点的父节点,以便下次选中时进去下一步的操作。
56.7、在地图编辑器中从新的四叉树中获取到这个编辑对象;
57.8、制作人员在本地图编辑器对选定的物件进行编辑;
58.地图编辑器是一款基于s3引擎的游戏场景编辑器,其具有以下特点:1.支持pc、android、ios一键资源发布。2.所见即所得,可视化编辑场景,提升开发效率。3.插件化的架构环境,便于开发人员新增、删除、修改功能。
59.例子:比如设计一个的大型游戏,游戏中准备了一张15000*15000像素的地图,地图中有许多树及石头,灯光,如果用户想知道当前鼠标点击的是不是自己所要编辑的对象,要怎么实现呢?
60.最简单的方法就是遍历地图内所有可编辑物件。根据可编辑物件的矩形范围是否包含鼠标点,这样是可以实现的,但如果地图中物件很多,而且现实中往往也很多,遍历的过程中因为代码运行时间过长就会导致游戏编辑器出现卡顿。本发明就是在这种环境下提出的解决方案。
61.本发明采用四叉树算法,能很好的解决上面所产生的性能问题,因为无需去考虑对象数量的多少,只需要遍历鼠标点周围一定范围下面的四叉树节点的所有显示对象即
可。但前提需要把地图中可编辑物件按所在的坐标构建一颗四叉树。
62.如果想知道当前鼠标点击的是不是地图中的桥,要怎么实现呢?
63.从程序层面出发最简单的思路就是遍历视野内所有显示对象实例,根据实例类型和实例的矩形范围是否包含鼠标点,这样看似是可以实现的,但如果视野内的玩家很多,多到你在遍历的过程中因为代码运行时间过长导致游戏掉帧而出现卡顿,那么这个时候搜索优化就派上用场了。
64.搜索优化在游戏中普遍采用四叉树算法,能很好的解决上面所产生的性能问题,无需去考虑对象数量的多少,只需要遍历鼠标点周围一定范围下面的四叉树节点的所有显示对象即可,来尝试着创建一个基于一定尺寸地图范围和最小矩形范围的四叉树。
65.现在准备了一张15000*15000像素的地图,里面布满了很多的怪物还有花花草草,和石头,房屋及桥还有一些宝箱,把四叉树节点的最小矩形宽高默认设置为250像素(默认宽高大小一致的矩形),下面来获取树的深度(depth)
66.树的深度即这个树有多少层节点,也可以简单理解为树的层数;
67.首先假设有n层,那么第n层的节点数量m和最小矩形的宽度相乘的值一定要大于等于地图的宽度;
68.或者说第n层的节点数量m和最小矩形的高度相乘的值要大于等于地图的高度,很好理解,但是要有取舍,取地图宽高的最大值来作为比较对象,这样才能覆盖整个地图区域,不会出现漏掉的区域。
69.这样每个物件最终根据他的坐标可以落在相应四叉树的节点上。
70.如图4:美术制作人员假设选中图4中的2-0编号的物件,则在地图编辑器中只要从第0层的0区域遍历第一层,并根据坐标所属的区域找到编辑1-0的分屏节点(极端情况下也只要遍历第一层的1-0,1-1,1-2,1-3),继续遍历1-0下的第三层的4个节点,根据4个子节点的坐标就可以定位到想要编辑的物件2-0,而不需要对所有的物件进行遍历;极大的提高了游戏制作效率。
71.如图5所示,本发明还提供了一种基于地图编辑器对可编辑对象查找的系统,所述系统包括新建地图模块、矩形设置模块、深度遍历模块、四叉树构建模块、更新节点模块、以及编辑对象获取模块;
72.所述新建地图模块,用于在地图编辑器中新建一张地图;
73.所述矩形设置模块,在地图编辑器中设定四叉树节点的最小矩形的宽度和高度;
74.所述深度遍历模块,操作人员要查找一物件时,获取选的物件需要遍历的层数,该层数即为四叉树的深度;所述深度遍历模块的实现方式进一步具体为:操作人员要查找一物件时,获取选的物件需要遍历的层数,设置获取的层数为n层,则第n层的节点数量m和最小矩形的宽度相乘的值一定要大于等于地图的宽度;或者第n层的节点数量m和最小矩形的高度相乘的值要大于等于地图的高度。
75.所述四叉树构建模块,用于构建四叉树,将树的唯一序号tid作为四叉树的第一个参数,将父节点的唯一序号oid作为四叉树的第二个参数,记录节点所覆盖的矩阵范围大小作为四叉树的第三个参数,记录节点所隶属的深度大小作为四叉树的第四个参数;
76.所述更新节点模块,用于当物件位置改变时动态更新当前的树节点;将更新后的树节点作为新的四叉树;
77.所述编辑对象获取模块,从新的四叉树中获取到这个编辑对象,即完成物件的编辑对象的查找。
78.所述系统还包括编辑操作模块,所述编辑操作模块,用于对查找到的编辑对象进行编辑操作。
79.其中,所述更新节点模块的实现方式进一步具体为:在地图编辑器中物件移动后,从一个区域移动到另一个区域,每当物件的坐标发生变化,判断物件是否还隶属于父节点的节点下方的范围内,否,则要更新物件所属的节点以及所属的父节点下方节点;是,则要更新物件所属的节点;更新树节点是个递归过程,从旧节点上移出去,添加到新节点上,子节点更新后还要更新父节点,直至遍历到新旧节点的父节点为止。其中,旧节点为物件未进行移动时,添加到的四叉树下方的节点;新节点为物件进行移动后,添加到的四叉树下方的节点。
80.以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献