一种在游戏地图中生成封锁区域的方法及其系统与流程
本发明涉及游戏地图制作领域,特别是一种在游戏地图中生成封锁区域的方法及其系统。
背景技术:
在游戏地图中,往往会将一张大地图分割为多个不同的区域。在每个地图场景内都会有属于自己的区域范围,每个区域都有自己特殊的事件,如一个玩家进入某区域会触发剧情,产生某个事件等。每个区域也有自己不同的地形地貌,有的是山地,有的是森林,有的是平原,有的是河流等等,都需要进行分区域来设计地形,使用分区设计,有助于降低设计地形的难度。比较重要的是,每个区域一般会有不同的资源,需要根据资源区的大小和环境类型设计不同资源区的区域大小和布局。但是在分割地图区域的时候,因为每个区域的形状是不规则的,生成的区域一般需要是封锁的,所以生成地图中的封锁区域是存在着一定的难度的。
电子游戏的“空气墙”在游戏过程中,看上去角色可以移动到的地方,实际上却被一层透明的"墙体"阻挡,叫空气墙。空气墙存在于大多数大型角色扮演游戏中,是因为游戏设定的模型框架,bug等等原因产生的。
技术实现要素:
为克服上述问题,本发明的目的是提供一种在游戏地图中生成封锁区域的方法,有助于游戏人员在编辑游戏地图时,对大地图进行分割区域,生成多个不同的封锁区域,提高了工作效率。
本发明采用以下方案实现:一种在游戏地图中生成封锁区域的方法,所述方法包括如下步骤:
步骤s1、在编辑游戏地图时,创建由多个顶点形成的空气墙;
步骤s2、在游戏地图上,编辑完多个不同空气墙后,将其组合成闭合的封锁区域;
步骤s3、设置每个封锁区域的编号以形成不同的地图封锁区域。
进一步的,所述步骤s1进一步具体为:在编辑游戏地图中,创建由多个顶点形成的空气墙,编辑空气墙时,使用颜色对空气墙墙面进行显示。
进一步的,所述步骤s2进一步具体为:在游戏地图上,编辑完多个不同的空气墙后,通过组合这些空气墙,将一个个空气墙的首尾相连,形成闭合的封锁区域,且要对封锁区域是否完全闭合进行判断,其中,判断封锁区域是否完全闭合的时候,由于空气墙高度都是固定的,因此,只要对空气墙底面顶点进行判断,空气墙顶面顶点不需要判断,则所述判断方式具体为:
设置选中空气墙对象列表和剩余空气墙对象列表,将所有的空气墙对象保存在剩余空气墙对象列表上,剩余空气墙对象列表用来判断列表空气墙对象使用情况,如果该剩余空气墙对象列表的空气墙判断过闭合操作,则将判断过的空气墙对象从剩余空气墙对象列表中删除,并添加到选中空气墙对象列表中;
对选中空气墙对象列表进行排序,在选中空气墙对象列表放入第一个空气墙,然后剩余空气墙对象列表中删除第一个空气墙;
如果只选中一个空气墙,就直接判断空气墙底面顶点是否是首尾相连,如果是,则判断该区域是闭合区域;否,则该区域不是闭合区域;
如果是选中多个空气墙,则通过空气墙的底面顶点坐标值对这些空气墙进行排序;每个空气墙的底面顶点坐标值,都等于空气墙的绝对坐标值加上底面顶点的相对坐标值;
遍历判断后序的空气墙,判断完一个空气墙的底面顶点,就将该空气墙从剩余空气墙对象列表删除,直到所有的空气墙删除完,剩余空气墙对象列表数目为0;
每个空气墙的底面顶点都有起点和终点,令空气墙的底面第1个顶点为起点,则最后一个则设置为终点;然后,判断上一个空气墙底面的终点是否是下一个空气墙底面的起点,如果上一个空气墙底面的终点是下一个空气墙底面的起点,则将该空气墙从剩余空气墙对象列表删除,继续进行遍历判断下一个空气墙底面的顶点;
如果上一个空气墙底面的终点不是下一个空气墙底面的起点,而是下一个空气墙底面的终点,则对下一个空气墙底面的顶点进行逆序操作,使得该空气墙底面的起点位置和终点位置交换;
在上述判断过程中,只要有一个空气墙底面的首尾的位置没有和别的空气墙底面的首尾的位置是相同的,则断定这些空气墙组合不成一个闭合区域,只有最后判断完所有空气墙底面顶点都能做到首尾相连,才能判断选中的这些空气墙能组成一个闭合区域。
进一步的,所述步骤s3进一步具体为:在地图中,通过创建空气墙组合形成封锁区域后,要设置每个封锁区域的编号以形成不同的地图封锁区域;由于每个空气墙左右两边只允许有一个区域,则给每个空气墙设置左区域编号和右区域编号,通过左区域编号和右区域编号,能确定一个封锁区域有几个空气墙。
进一步的,所述设置区域编号的方式如下:该封锁区域的左右区域编号都不存在时,则将该封锁区域设置左区域编号;
该封锁区域的左区域编号存在,右区域编号不存在时,则将该封锁区域设置右区域编号;
该封锁区域的左区域编号不存在,右区域编号存在时,则将该封锁区域设置左区域编号;
该封锁区域的左右区域编号都存在时,则需要进行判断,新设置的编号是否和已有编号相同,若相同,则不需要重新设置,若不同,则需要将旧的那个区域编号删除,设置新的区域编号。
本发明还提供了一种在游戏地图中生成封锁区域的系统,所述系统包括:空气墙创建模块、封锁区域生产模块、以及封锁区域编号模块;
所述空气墙创建模块,用于在编辑游戏地图时,创建由多个顶点形成的空气墙;
所述封锁区域生产模块,用于在游戏地图上,编辑完多个不同空气墙后,将其组合成闭合的封锁区域;
所述封锁区域编号模块,用于设置每个封锁区域的编号以形成不同的地图封锁区域。
进一步的,所述空气墙创建模块的实现方式进一步具体为:在编辑游戏地图中,创建由多个顶点形成的空气墙,编辑空气墙时,使用颜色对空气墙墙面进行显示。
进一步的,所述封锁区域生产模块的实现方式进一步具体为:在游戏地图上,编辑完多个不同的空气墙后,通过组合这些空气墙,将一个个空气墙的首尾相连,形成闭合的封锁区域,且要对封锁区域是否完全闭合进行判断,其中,判断封锁区域是否完全闭合的时候,由于空气墙高度都是固定的,因此,只要对空气墙底面顶点进行判断,空气墙顶面顶点不需要判断,则所述判断方式具体为:
设置选中空气墙对象列表和剩余空气墙对象列表,将所有的空气墙对象保存在剩余空气墙对象列表上,剩余空气墙对象列表用来判断列表空气墙对象使用情况,如果该剩余空气墙对象列表的空气墙判断过闭合操作,则将判断过的空气墙对象从剩余空气墙对象列表中删除,并添加到选中空气墙对象列表中;
对选中空气墙对象列表进行排序,在选中空气墙对象列表放入第一个空气墙,然后剩余空气墙对象列表中删除第一个空气墙;
如果只选中一个空气墙,就直接判断空气墙底面顶点是否是首尾相连,如果是,则判断该区域是闭合区域;否,则该区域不是闭合区域;
如果是选中多个空气墙,则通过空气墙的底面顶点坐标值对这些空气墙进行排序;每个空气墙的底面顶点坐标值,都等于空气墙的绝对坐标值加上底面顶点的相对坐标值;
遍历判断后序的空气墙,判断完一个空气墙的底面顶点,就将该空气墙从剩余空气墙对象列表删除,直到所有的空气墙删除完,剩余空气墙对象列表数目为0;
每个空气墙的底面顶点都有起点和终点,令空气墙的底面第1个顶点为起点,则最后一个则设置为终点;然后,判断上一个空气墙底面的终点是否是下一个空气墙底面的起点,如果上一个空气墙底面的终点是下一个空气墙底面的起点,则将该空气墙从剩余空气墙对象列表删除,继续进行遍历判断下一个空气墙底面的顶点;
如果上一个空气墙底面的终点不是下一个空气墙底面的起点,而是下一个空气墙底面的终点,则对下一个空气墙底面的顶点进行逆序操作,使得该空气墙底面的起点位置和终点位置交换;
在上述判断过程中,只要有一个空气墙底面的首尾的位置没有和别的空气墙底面的首尾的位置是相同的,则断定这些空气墙组合不成一个闭合区域,只有最后判断完所有空气墙底面顶点都能做到首尾相连,才能判断选中的这些空气墙能组成一个闭合区域。
进一步的,所述封锁区域编号模块的实现方式进一步具体为:在地图中,通过创建空气墙组合形成封锁区域后,要设置每个封锁区域的编号以形成不同的地图封锁区域;由于每个空气墙左右两边只允许有一个区域,则给每个空气墙设置左区域编号和右区域编号,通过左区域编号和右区域编号,能确定一个封锁区域有几个空气墙。
进一步的,所述设置区域编号的方式如下:该封锁区域的左右区域编号都不存在时,则将该封锁区域设置左区域编号;
该封锁区域的左区域编号存在,右区域编号不存在时,则将该封锁区域设置右区域编号;
该封锁区域的左区域编号不存在,右区域编号存在时,则将该封锁区域设置左区域编号;
该封锁区域的左右区域编号都存在时,则需要进行判断,新设置的编号是否和已有编号相同,若相同,则不需要重新设置,若不同,则需要将旧的那个区域编号删除,设置新的区域编号。
本发明的有益效果在于:本发明在游戏地图中创建由多个顶点形成的空气墙,将多个空气墙组合成闭合的封锁区域,设置每个封锁区域的编号以形成不同的地图封锁区域,这样有助于游戏人员在编辑游戏地图时,对大地图进行分割区域,生成多个不同的封锁区域,进行后续游戏地图的开发,使得开发人员操作更加方便,提高了工作效率。
附图说明
图1是本发明的方法流程示意图。
图2是本发明实施例的一个空气墙底面顶点示意图。
图3是本发明实施例的空气墙底面组成的封锁区域示意图。
图4是本发明实施例的封锁区域设置的编号示意图。
图5是本发明的系统原理框图。
具体实施方式
下面结合附图对本发明做进一步说明。
请参阅图1所示,本发明的一种在游戏地图中生成封锁区域的方法,所述方法包括如下步骤:
步骤s1、在编辑游戏地图时,创建由多个顶点形成的空气墙;所述步骤s1进一步具体为:在编辑游戏地图中,创建由多个顶点形成的空气墙,编辑空气墙时,使用颜色对空气墙墙面进行显示。
步骤s2、在游戏地图上,编辑完多个不同空气墙后,将其组合成闭合的封锁区域;
步骤s3、设置每个封锁区域的编号以形成不同的地图封锁区域。
下面结合一具体实施例对本发明做进一步说明:
本发明的一种在游戏地图中生成封锁区域的方法:
1.在游戏地图中创建由多个顶点形成的空气墙
在编辑游戏地图中,创建由多个顶点(至少需要两个顶点)形成的空气墙。空气墙指的是一个透明的,拥有碰撞体积的物体。和普通的物体墙类似,但是在运行游戏时,在地图上是看不见的,就像是被空气中看不到的墙挡住。因为空气墙支持多个顶点的设置,就可以满足多种不规则图形的设置。
编辑空气墙时,使用绿色的墙面来显示,这样在编辑时比较明显,易于操作。在实际地图中,该空气墙并不会显示,只是作为封锁区域的划分。每个空气墙可以有多个顶点,形成了一个个不规则的图形,这些不规则图形的空气墙,可以通过其顶点进行连接。
如图2所示,是一个具有三个顶点的空气墙,因为这边设定的空气墙高度都是固定的,所以顶点数都指的是空气墙底面的顶点,上面的顶点不进入计算,就比如下面的其中一个顶点是(0,0,0),固定高度是10的话,上面的顶点是(0,0,10)。
2.将多个空气墙组合成闭合的封锁区域
在游戏地图上,编辑完多个不同的空气墙后,就可以通过组合这些空气墙,将一个个空气墙的首尾相连,形成闭合的封锁区域了。但是只有完全闭合的空气墙才可以形成一个封锁区域,所以需要进行封锁区域闭合的判断。下面是这边使用的区域闭合算法。
比较常见的区域闭合算法是:如果一个图形是闭合的,那么对于其中的每一个结点来说,它至少有一个相连的出节点,也至少有一个入节点,加上自身,以它为中心的九宫格内必须至少有三个结点。因此,只需判断节点数是否都大于2即可,如果有一个结点不大于2,那么就不是闭合图形。但是这种图形算法需要知道所有顶点和边,而这边通过空气墙生成的图形,只知道某条边的首尾顶点和这条边中间添加的顶点,所以不适用于这个常见算法。
由于封锁区域是完全闭合的,所以可以通过判断一条边的延长线是否伸出区域外,来判断该区域是否闭合。算法如下:
(1)首先将选中的空气墙对象保存在一个列表上,命名为选中空气墙对象列表。然后再将这些空气墙再保存在另一个列表上,用来判断列表空气墙对象使用情况,如果该列表的空气墙判断过闭合操作,就需要将判断过的空气墙对象从该列表中删除,将该列表命名为剩余空气墙对象列表。这样就存在两个列表,一个是当前选中的选中空气墙对象列表,另一个就是剩余空气墙对象列表;
(2)给选中的选中空气墙对象列表进行排序,放入第一个空气墙,然后剩余空气墙对象列表中删除第一个空气墙;
(3)如果只选中一个空气墙,就直接判断空气墙底面顶点是否是首尾相连,如果是则可以判断该区域是闭合区域;
(4)如果是选中多个空气墙,则通过空气墙底面的顶点坐标值对这些空气墙进行排序。每个空气墙底面的顶点坐标值(绝对坐标),都等于空气墙的绝对坐标值加上底面顶点的相对坐标值;
(5)遍历判断后面的空气墙,判断完一个空气墙底面的顶点,就将该空气墙从剩余空气墙对象列表删除,直到所有的空气墙的删除完,剩余空气墙对象列表数目为0;
(6)每个空气墙的底面顶点都有起点和终点,设定第一个顶点为起点,最后一个为终点,空气墙假如有三个顶点,第1个则设置为起点,第3个则设置为终点,以此类推;下面将举个例子来解释这种情况:
第一个空气墙存在四个底面顶点:第一个顶点为(0,0,0),即为起点;第二个顶点为(0,5,0);第三个顶点为(0,8,0);第四个顶点为(0,10,0),即为终点;
第二个空气墙存在两个底面顶点:第一个顶点为(0,10,0),即为起点;第二个顶点为(10,10,0),即为终点;
第三个空气墙存在四个底面顶点:第一个顶点为(10,0,0),即为起点;第二个顶点为(10,5,0);第三个顶点为(8,8,0);第四个顶点为(10,10,0),即为终点;
第四个空气墙存在两个底面顶点:第一个顶点为(10,0,0),即为起点;第二个顶点为(0,0,0),即为终点。
(7)通过判断顶点的坐标位置是否完全相同(即x轴坐标,y轴坐标,z轴坐标都需要完全一致),判断上一个空气墙底面的终点是否是下一个空气墙底面的起点,如果上一个空气墙底面的终点是下一个空气墙底面的起点,则将该空气墙从剩余空气墙列表删除,继续进行遍历判断下一个顶点。比如,上面例子的第一个空气墙底面的终点就和第二个空气墙底面的起点完全相同,则继续进行判断第二个空气墙和第三个空气墙。
如果上一个空气墙底面的终点不是下一个空气墙底面的起点,而是下一个空气墙底面的终点,则对下一个空气墙底面的顶点进行逆序操作,使得该空气墙底面的起点位置和终点位置交换。比如,上面例子的第二个空气墙底面的终点就和第三个空气墙底面的终点位置相同,就将第三个空气墙底面的顶点进行逆序操作,逆序操作完后,第三个空气墙就变为第一个顶点是(10,10,0),即为起点,第二个顶点为(8,8,0),第三个顶点为(10,5,0),第四个顶点为(10,0,0),即为终点。逆序操作完,即可满足下一个空气墙底面的起点是上一个空气墙底面的终点,继续进行遍历判断下一个空气墙,直到判断完所有的空气墙。
(8)在上述判断过程中,只要有一个空气墙的首尾的位置没有别的空气墙的首尾的位置和其相同,则可以判断这些空气墙组合不成一个闭合区域,最后判断完所有空气墙底面顶点都可以做到首尾相连,才可以判断选中的这些空气墙可以组成一个闭合区域。
参阅图3所示,是通过上面例子的四个空气墙组成的一个区域的平面图。
3.设置每个封锁区域的编号以形成不同的地图封锁区域
在地图中,通过创建空气墙组合成封锁区域后,就需要设置每个封锁区域的编号以形成不同的地图封锁区域。因为每个空气墙左右两边只允许有一个区域,所以可以给每个空气墙设置左区域编号和右区域编号,通过左区域编号和右区域编号,就可以确定一个区域有几个空气墙,是通过哪几个空气墙组合成该区域的。
区域编号的格式是直接以数字来进行编号的,左区域编号为leftareaindex,右区域编号为rightareaindex,设置一个空气墙左区域为区域1的话,即设置leftareaindex=1,设置右区域为区域2的话,即设置rightareaindex=2。
设置区域编号方法如下:
(1)左右区域编号都不存在时,则设置左区域编号;
(2)左区域编号存在,右区域编号不存在时,则设置右区域编号;
(3)左区域编号不存在,右区域编号存在时,则设置左区域编号;
(4)左右区域编号都存在时,则需要进行判断,新设置的编号是否和已有编号相同,若相同,则不需要重新设置,若不同,则需要将最旧的那个区域编号删除,设置新的区域编号。
如图4的区域设置编号:图中展示了给区域设置编号形成后的效果图。第一个空气墙左区域编号设置为1,未设置右区域编号;第二个空气墙左区域编号设置为1,右区域编号设置为2;第三个空气墙左区域编号设置为5,右区域编号设置为1;第四个空气墙左区域编号设置为1,未设置右区域编号。
请参阅图5所示,本发明还提供了一种在游戏地图中生成封锁区域的系统,所述系统包括:空气墙创建模块、封锁区域生产模块、以及封锁区域编号模块;
所述空气墙创建模块,用于在编辑游戏地图时,创建由多个顶点形成的空气墙;
所述封锁区域生产模块,用于在游戏地图上,编辑完多个不同空气墙后,将其组合成闭合的封锁区域;
所述封锁区域编号模块,用于设置每个封锁区域的编号以形成不同的地图封锁区域。
所述空气墙创建模块的实现方式进一步具体为:在编辑游戏地图中,创建由多个顶点形成的空气墙,编辑空气墙时,使用颜色对空气墙墙面进行显示。
所述封锁区域生产模块的实现方式进一步具体为:在游戏地图上,编辑完多个不同的空气墙后,通过组合这些空气墙,将一个个空气墙的首尾相连,形成闭合的封锁区域,且要对封锁区域是否完全闭合进行判断,其中,判断封锁区域是否完全闭合的时候,由于空气墙高度都是固定的,因此,只要对空气墙底面顶点进行判断,空气墙顶面顶点不需要判断,则所述判断方式具体为:
设置选中空气墙对象列表和剩余空气墙对象列表,将所有的空气墙对象保存在剩余空气墙对象列表上,剩余空气墙对象列表用来判断列表空气墙对象使用情况,如果该剩余空气墙对象列表的空气墙判断过闭合操作,则将判断过的空气墙对象从剩余空气墙对象列表中删除,并添加到选中空气墙对象列表中;
对选中空气墙对象列表进行排序,在选中空气墙对象列表放入第一个空气墙,然后剩余空气墙对象列表中删除第一个空气墙;
如果只选中一个空气墙,就直接判断空气墙底面顶点是否是首尾相连,如果是,则判断该区域是闭合区域;否,则该区域不是闭合区域;
如果是选中多个空气墙,则通过空气墙的底面顶点坐标值对这些空气墙进行排序;每个空气墙的底面顶点坐标值,都等于空气墙的绝对坐标值加上底面顶点的相对坐标值;
遍历判断后序的空气墙,判断完一个空气墙的底面顶点,就将该空气墙从剩余空气墙对象列表删除,直到所有的空气墙删除完,剩余空气墙对象列表数目为0;
每个空气墙的底面顶点都有起点和终点,令空气墙的底面第1个顶点为起点,则最后一个则设置为终点;然后,判断上一个空气墙底面的终点是否是下一个空气墙底面的起点,如果上一个空气墙底面的终点是下一个空气墙底面的起点,则将该空气墙从剩余空气墙对象列表删除,继续进行遍历判断下一个空气墙底面的顶点;
如果上一个空气墙底面的终点不是下一个空气墙底面的起点,而是下一个空气墙底面的终点,则对下一个空气墙底面的顶点进行逆序操作,使得该空气墙底面的起点位置和终点位置交换;
在上述判断过程中,只要有一个空气墙底面的首尾的位置没有和别的空气墙底面的首尾的位置是相同的,则断定这些空气墙组合不成一个闭合区域,只有最后判断完所有空气墙底面顶点都能做到首尾相连,才能判断选中的这些空气墙能组成一个闭合区域。
所述封锁区域编号模块的实现方式进一步具体为:在地图中,通过创建空气墙组合形成封锁区域后,要设置每个封锁区域的编号以形成不同的地图封锁区域;由于每个空气墙左右两边只允许有一个区域,则给每个空气墙设置左区域编号和右区域编号,通过左区域编号和右区域编号,能确定一个封锁区域有几个空气墙。
其中,所述设置区域编号的方式如下:该封锁区域的左右区域编号都不存在时,则将该封锁区域设置左区域编号;
该封锁区域的左区域编号存在,右区域编号不存在时,则将该封锁区域设置右区域编号;
该封锁区域的左区域编号不存在,右区域编号存在时,则将该封锁区域设置左区域编号;
该封锁区域的左右区域编号都存在时,则需要进行判断,新设置的编号是否和已有编号相同,若相同,则不需要重新设置,若不同,则需要将旧的那个区域编号删除,设置新的区域编号。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。
此文章来源于网络,如有侵权,请联系删除