CN111714892B - 游戏寻路方法及装置、存储介质、计算机设备 - Google Patents

游戏寻路方法及装置、存储介质、计算机设备 Download PDF

Info

Publication number
CN111714892B
CN111714892B CN202010602476.8A CN202010602476A CN111714892B CN 111714892 B CN111714892 B CN 111714892B CN 202010602476 A CN202010602476 A CN 202010602476A CN 111714892 B CN111714892 B CN 111714892B
Authority
CN
China
Prior art keywords
node
path
finding
game
voxel grid
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010602476.8A
Other languages
English (en)
Other versions
CN111714892A (zh
Inventor
韩永强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianjin Yake Interactive Technology Co ltd
Original Assignee
Tianjin Yake Interactive Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tianjin Yake Interactive Technology Co ltd filed Critical Tianjin Yake Interactive Technology Co ltd
Priority to CN202010602476.8A priority Critical patent/CN111714892B/zh
Publication of CN111714892A publication Critical patent/CN111714892A/zh
Application granted granted Critical
Publication of CN111714892B publication Critical patent/CN111714892B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/55Controlling game characters or game objects based on the game progress
    • A63F13/56Computing the motion of game characters with respect to other game characters, game objects or elements of the game scene, e.g. for simulating the behaviour of a group of virtual soldiers or for path finding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本申请公开了一种游戏寻路方法及装置、存储介质、计算机设备,该方法包括:接收寻路指令,并查询体素文件获取与所述寻路指令对应的起始点体素格子和目标点体素格子;基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子;根据所述寻路路径的体素格子,确定游戏角色在所述寻路路径上的行进方式。本申请一方面可以有效提高寻路路径确定后游戏角色的寻路成功率,避免了既定行进方式与寻路路径不匹配导致游戏角色无法行进的情况发生,另一方面可以基于玩家需求为寻路路径匹配合适的行进方式,以减少游戏角色的寻路时间、经济等成本,提高玩家游戏体验。

Description

游戏寻路方法及装置、存储介质、计算机设备
技术领域
本申请涉及游戏技术领域,尤其是涉及到一种游戏寻路方法及装置、存储介质、计算机设备。
背景技术
随着互联网技术的不断发展,游戏行业日新月异,越来越智能化和拟人化的游戏AI在游戏中愈加重要,例如在大型网络游戏中,可以通过游戏AI控制或者模拟,实现虚拟角色的活动规划等,以带给玩家更加真实的游戏体验。
在游戏中,无论是玩家控制的虚拟角色还是***控制的虚拟角色,从一个地点寻路到另一个地点是一项常见的行为,尤其是在完成各种任务的时候,经常需要进行长距离寻路。目前游戏中的寻路行为大多是在确定寻路路径以后,基于玩家角色当下的出行方式按照寻路路径向目标点行进,例如当前行进方式为步行,寻路后角色就会沿着寻路路径步行至终点,玩家若想选择其他行进方式需要手动选择以后重新寻路。再例如当前行进方式为骑乘宠物,寻路后角色就会沿着寻路路径骑行若中途需要穿越宠物无法通过的城池时游戏角色会停留在城池外无法通行或者进入城池后在剩余寻路路径上步行继续行进。现有技术的寻路方式无法根据寻路路径选择合适的出行方式,玩家仍然需要通过手动操作选择合适的行进方式,导致寻路方式不够智能,影响玩家游戏体验。
发明内容
有鉴于此,本申请提供了一种游戏寻路方法及装置、存储介质、计算机设备,一方面可以有效提高寻路路径确定后游戏角色的寻路成功率,另一方面可以基于玩家需求为寻路路径匹配合适的行进方式,以减少游戏角色的寻路时间、经济等成本,提高玩家游戏体验。
根据本申请的一个方面,提供了一种游戏寻路方法,包括:
接收寻路指令,并查询体素文件获取与所述寻路指令对应的起始点体素格子和目标点体素格子;
基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子;
根据所述寻路路径的体素格子,确定游戏角色在所述寻路路径上的行进方式。
具体地,所述体素文件在游戏制作阶段产生,并在游戏运行阶段基于游戏场景内的资源更新数据进行更新。
具体地,所述确定与所述寻路指令对应的寻路路径的体素格子之前,所述方法还包括:
获取所述起始点体素格子对应的起始点连通分量以及所述目标点体素格子对应的目标点连通分量;
若所述起始点连通分量与所述目标点连通分量相同,则执行所述基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子。
具体地,在游戏制作阶段,基于深度优先算法遍历所述体素文件对应游戏场景中的任意一点的可达点后将所述任意一点以及所述可达点设置相同的连通分量,并在游戏运行阶段基于所述游戏场景内的所述资源更新数据进行更新。
具体地,所述基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子,具体包括:
基于与游戏场景匹配的体素空间,确定所述起始点体素格子和所述目标点体素格子在所述体素空间中的起始节点和目标节点;
将所述起始节点添加到开启列表中;
判断所述开启列表中是否包含所述目标节点;
若不包含,则从所述开启列表中取出F值最小的节点作为当前节点,并将所述当前节点加入到关闭列表中;
搜索与所述当前节点相邻的可到达节点;
若所述可到达节点存在于所述关闭列表中,则略过;
若所述可到达节点存在于所述开启列表中,则检查通过所述当前节点到达所述可到达节点的F值是否更小,若更小则更新所述可到达节点的F值,并将所述当前节点设置为所述可到达节点的父节点;
若所述可到达节点不在所述开启列表中,则将所述可到达节点加入所述开启列表中,并记录所述可到达节点的F值,将将所述当前节点设置为所述可到达节点的父节点;
返回判断所述开启列表中是否包含所述目标节点,直至所述开启列表包含所述目标节点时,基于所述开启列表确定所述寻路路径;
其中,F值为相应节点到所述起始节点的实际代价值与相应节点到所述目标节点的预测代价值之和。
具体地,所述搜索与所述当前节点相邻的可到达节点,具体包括:
获取所述当前节点在水平面的预设水平方向上的相邻水平节点以及所述相邻水平节点对应的节点高度;
若所述当前节点的节点高度与所述相邻水平节点的节点高度之差在预设高度差范围内,则将所述相邻水平节点确定为所述可到达节点。
具体地,所述基于所述开启列表确定所述寻路路径,具体包括:
由所述目标节点开始,根据所述目标节点的父节点向后回溯,得到从所述起始节点到所述目标节点的寻路路径。
具体地,所述根据所述寻路路径的体素格子,确定游戏角色在所述寻路路径上的行进方式,具体包括:
按照游戏场景对应的至少一种区域类型,将所述寻路路径划分为至少一个路径段,其中,每个所述路径段对应一种区域类型,相邻的两个路径段对应的区域类型不同,不同的区域类型对应的行进方式不同;
基于所述路径段以及与所述路径段匹配的行进方式文件,确定所述游戏角色在所述路径段上的行进方式。
具体地,所述基于所述路径段以及与所述路径段匹配的行进方式文件,确定所述游戏角色在所述路径段上的行进方式,具体包括:
若任一路径段匹配的行进方式文件包括至少两种行进方式,则分别计算按照每种行进方式在所述任一路径段上行进所需的代价,并选取代价最小的行进方式作为所述任一路径段对应的行进方式。
具体地,所述代价包括时间代价和/或经济代价。
具体地,所述接收寻路指令,具体包括:
基于接收到的对游戏界面中预设可寻路位置的点击,生成所述寻路指令,其中,所述预设可寻路位置包括但不限于游戏场景地图或文字链接,所述目标点体素格子包括点击的所述有游戏场景地图中的任意位置对应的体素格子或所述文字链接的对应位置的体素格子,所述起始点体素格子包括游戏角色的当前位置对应的体素格子。
根据本申请的另一方面,提供了一种游戏寻路装置,包括:
寻路指令接收模块,用于接收寻路指令,并查询体素文件获取与所述寻路指令对应的起始点体素格子和目标点体素格子;
寻路模块,用于基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子;
行进方式确定模块,用于根据所述寻路路径的体素格子,确定游戏角色在所述寻路路径上的行进方式。
具体地,所述体素文件在游戏制作阶段产生,并在游戏运行阶段基于游戏场景内的资源更新数据进行更新。
具体地,所述装置还包括:
连通分量获取模块,用于所述确定与所述寻路指令对应的寻路路径的体素格子之前,获取所述起始点体素格子对应的起始点连通分量以及所述目标点体素格子对应的目标点连通分量;
所述寻路模块,还用于若所述起始点连通分量与所述目标点连通分量相同,则执行所述基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子。
具体地,在游戏制作阶段,基于深度优先算法遍历所述体素文件对应游戏场景中的任意一点的可达点后将所述任意一点以及所述可达点设置相同的连通分量,并在游戏运行阶段基于所述游戏场景内的所述资源更新数据进行更新。
具体地,所述寻路模块,具体包括:
节点确定单元,用于基于与游戏场景匹配的体素空间,确定所述起始点体素格子和所述目标点体素格子在所述体素空间中的起始节点和目标节点;
开启列表确定单元,用于将所述起始节点添加到开启列表中;
开启列表判断单元,用于判断所述开启列表中是否包含所述目标节点;
关闭列表确定单元,用于若不包含,则从所述开启列表中取出F值最小的节点作为当前节点,并将所述当前节点加入到关闭列表中;
可到达节点确定单元,用于搜索与所述当前节点相邻的可到达节点;
第一节点处理单元,用于若所述可到达节点存在于所述关闭列表中,则略过;
第二节点处理单元,用于若所述可到达节点存在于所述开启列表中,则检查通过所述当前节点到达所述可到达节点的F值是否更小,若更小则更新所述可到达节点的F值,并将所述当前节点设置为所述可到达节点的父节点;
第三节点处理单元,用于若所述可到达节点不在所述开启列表中,则将所述可到达节点加入所述开启列表中,并记录所述可到达节点的F值,将将所述当前节点设置为所述可到达节点的父节点;
寻路路径单元,用于返回判断所述开启列表中是否包含所述目标节点,直至所述开启列表包含所述目标节点时,基于所述开启列表确定所述寻路路径;
其中,F值为相应节点到所述起始节点的实际代价值与相应节点到所述目标节点的预测代价值之和。
具体地,所述可到达节点确定单元,具体包括:
相邻节点获取子单元,用于获取所述当前节点在水平面的预设水平方向上的相邻水平节点以及所述相邻水平节点对应的节点高度;
可到达节点确定子单元,用于若所述当前节点的节点高度与所述相邻水平节点的节点高度之差在预设高度差范围内,则将所述相邻水平节点确定为所述可到达节点。
具体地,所述寻路路径单元,具体用于:
由所述目标节点开始,根据所述目标节点的父节点向后回溯,得到从所述起始节点到所述目标节点的寻路路径。
具体地,所述行进方式确定模块,具体包括:
路径段划分单元,用于按照游戏场景对应的至少一种区域类型,将所述寻路路径划分为至少一个路径段,其中,每个所述路径段对应一种区域类型,相邻的两个路径段对应的区域类型不同,不同的区域类型对应的行进方式不同;
行进方式确定单元,用于基于所述路径段以及与所述路径段匹配的行进方式文件,确定所述游戏角色在所述路径段上的行进方式。
具体地,所述行进方式确定单元,具体用于:
若任一路径段匹配的行进方式文件包括至少两种行进方式,则分别计算按照每种行进方式在所述任一路径段上行进所需的代价,并选取代价最小的行进方式作为所述任一路径段对应的行进方式。
具体地,所述代价包括时间代价和/或经济代价。
具体地,所述寻路指令接收模块,具体用于:
基于接收到的对游戏界面中预设可寻路位置的点击,生成所述寻路指令,其中,所述预设可寻路位置包括但不限于游戏场景地图或文字链接,所述目标点体素格子包括点击的所述有游戏场景地图中的任意位置对应的体素格子或所述文字链接的对应位置的体素格子,所述起始点体素格子包括游戏角色的当前位置对应的体素格子。
依据本申请又一个方面,提供了一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述游戏寻路方法。
依据本申请再一个方面,提供了一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述游戏寻路方法。
借由上述技术方案,本申请提供的一种游戏寻路方法及装置、存储介质、计算机设备,在接收到寻路指令之后,对寻路指令进行解析获取对应的起始点和目标点,从而基于起始点和目标点在游戏场景内确定寻路路径,进一步还可以确定游戏角色在寻路路径上的行进方式,以使游戏角色在寻路路径上按照相应的行进方式行进。本申请实施例可以确定游戏角色在寻路路径上的行进方式,相比于现有技术中按照既定初始行进方式完成寻路的方式相比,一方面可以有效提高寻路路径确定后游戏角色的寻路成功率,避免了既定行进方式与寻路路径不匹配导致游戏角色无法行进的情况发生,另一方面可以基于玩家需求为寻路路径匹配合适的行进方式,以减少游戏角色的寻路时间、经济等成本,提高玩家游戏体验。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1示出了本申请实施例提供的一种游戏寻路方法的流程示意图;
图2示出了本申请实施例提供的另一种游戏寻路方法的流程示意图;
图3示出了本申请实施例提供的另一种游戏寻路方法的流程示意图;
图4示出了本申请实施例提供的另一种游戏寻路方法的流程示意图;
图5示出了本申请实施例提供的一种游戏寻路装置的结构示意图;
图6示出了本申请实施例提供的另一种游戏寻路装置的结构示意图;
图7示出了本申请实施例提供的一种初始寻路方向示意图;
图8示出了本申请实施例提供的一种相邻节点可达规则的示意图;
图9示出了本申请实施例提供的一种寻路路径示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
在本实施例中提供了一种游戏寻路方法,如图1所示,该方法包括:
步骤101,接收寻路指令,并查询体素文件获取与寻路指令对应的起始点体素格子和目标点体素格子。
步骤102,基于起始点体素格子和目标点体素格子,确定与寻路指令对应的寻路路径的体素格子。
步骤103,根据寻路路径的体素格子,确定游戏角色在寻路路径上的行进方式。
本申请实施例可以应用于游戏技术领域,尤其是在游戏进行过程中,在玩家用户的控制的虚拟角色或者是游戏中AI***的虚拟角色需要从虚拟角色所处的位置寻路到其他地方,例如在游戏场景中的虚拟角色需要进行移动,以完成各自在游戏场景中的任务,或者去到某些标记地点和特定位置等。一般来说,在游戏中,虚拟角色可以是由玩家控制,也可以是***控制(例如NPC、野怪、虚拟队友等等)。对于由玩家控制的虚拟角色,可以由玩家手动控制虚拟角色向目的地行进,也可以是玩家指定一个目的地(标记地点),虚拟角色自己移动到目的地,由***控制的虚拟角色是模仿玩家对虚拟角色的控制,需要由***控制虚拟角色到达指定目的地,完成相应任务。针对于玩家指定目的地以及***控制的虚拟角色,因为没有玩家操作指示虚拟角色的行进路线,都需要在游戏场景中进行寻路,以保证虚拟角色可以到达指定目的地。
基于上述描述,接收的寻路指令可以是玩家在游戏过程中根据游戏任务指示虚拟角色要去往的目的地,也可以是虚拟角色在***中需要进行日常任务或是游戏中的特定任务需要进行寻路的控制指令,例如,在第一人称射击类游戏中,对于由***控制的虚拟角色,在接收到其他队友的信号以后,需要到指定的任务地点集合,这时控制该虚拟角色由当前位置到任务地点集合的指令,就是一条寻路控制指令。其中,虚拟角色的当前位置,是在虚拟角色接收到寻路控制指令时,在游戏场景中所在的具***置,可以是由游戏地图中的具体经纬度定位,也可以是由游戏场景中建立的坐标系中坐标确定,还可以是根据游戏场景中的标志性场景来定位。寻路的过程是指虚拟角色从起始点移动到目标点的过程,因此在接收到寻路指令之后,先确定与该寻路指令对应的起始点和目标点,而在本申请实施例中游戏场景是基于体素文件创建的,因此游戏内的寻路具体是指虚拟角色从起始点体素格子移动到目标点体素格子的过程(下文将起始点体素格子简称为起始点,将目标点体素格子简称为目标点),进而依据起始点和目标点进行寻路路径规划,得到与寻路指令对应的寻路路径的体素格子(下文将寻路路径的体素格子简称为寻路路径),寻路路径的起点为寻路指令对应的起始点,寻路路径的终点为寻路指令对应的目标点。确定寻路路径之后,虚拟游戏角色就可以按照寻路路径从起始点出发移动到目标点,以便完成相应的游戏任务,但在一些游戏场景中,还可以基于寻路路径确定合适的出行方式,例如对于一些地形复杂的游戏场景,从起始点到目标点需要横跨河流、穿越城池,横跨河流时需要划船度过,穿越城池时需要步行通过,这时就需要为寻路路径选择与其匹配的出行方式,否则若按照用户初始既定的某种出行方式(例如用户初始选择的出行方式为步行,需要横跨河流时步行无法通过),寻路过程无法完成。因此,本申请实施例提出了确定游戏角色在寻路路径上的行进方式,以确保寻路过程顺利完成。当然,在很多游戏场景中,采用一种行进方式就可以完成寻路过程,但选择不同的行进方式所花费的寻路代价是不同的,例如骑乘坐骑出行相比于步行的行进速度更快,若玩家希望快速完成寻路,则***可以为玩家匹配一种花费时间最短的行进方式(或者行进方式组合),具体可以优先选择骑乘、飞行等行进方式,再例如骑乘坐骑出行需要给坐骑投喂食物,食物需要用游戏金币购买或者玩家制作,相比于步行的方式经济代价更高,若玩家对寻路完成时间没有要求(例如玩家下达寻路指令以后就离开电脑或手机,挂机让游戏角色自动寻路),则***可以为玩家匹配一种经济花费最少的行进方式(或行进方式组合),具体可以优先选择步行。确定游戏角色在寻路路径上的行进方式以后,就可以控制游戏角色按照相应的行进方式在寻路路径上行进,到达目标点完成寻路。
通过应用本实施例的技术方案,在接收到寻路指令之后,对寻路指令进行解析在体素文件中获取对应的起始点体素格子和目标点体素格子,从而基于起始点体素格子和目标点体素格子在游戏场景内确定寻路路径对应的体素格子,进一步还可以确定游戏角色在寻路路径上的行进方式,以使游戏角色在寻路路径上按照相应的行进方式行进。本申请实施例可以确定游戏角色在寻路路径上的行进方式,相比于现有技术中按照既定初始行进方式完成寻路的方式相比,一方面可以有效提高寻路路径确定后游戏角色的寻路成功率,避免了既定行进方式与寻路路径不匹配导致游戏角色无法行进的情况发生,另一方面可以基于玩家需求为寻路路径匹配合适的行进方式,以减少游戏角色的寻路时间、经济等成本,提高玩家游戏体验。
进一步的,作为上述实施例具体实施方式的细化和扩展,为了完整说明本实施例的具体实施过程,提供了另一种游戏寻路方法,如图2所示,该方法包括:
步骤201,接收寻路指令,并查询体素文件获取与寻路指令对应的起始点体素格子和目标点体素格子。
在本申请实施例中,具体地,基于接收到的对游戏界面中预设可寻路位置的点击,生成寻路指令,其中,预设可寻路位置包括但不限于游戏场景地图或文字链接,目标点体素格子包括点击的有游戏场景地图中的任意位置对应的体素格子或文字链接的对应位置的体素格子,起始点体素格子包括游戏角色的当前位置对应的体素格子。
在上述实施例中,寻路指令可以由玩家用户下达,玩家可以通过对游戏界面中预设可寻路位置的点击下达寻路指令,具体可以点击游戏界面中虚拟角色所在地图、地图缩略图,或者点击任务列表中任务内容中的文字链接、任务图标等等。例如,玩家点击地图中的某个点,***可以获取到该点的位置信息生成寻路指令,又例如,玩家点击任务内容描述中的特定文字(比如,任务内容为“与王村长交谈”,其中“王村长”为可寻路文字,玩家点击“王村长”可以生成寻路指令,寻路的目标点为“王村长”的所在位置对应的体素格子)。寻路指令对应的起始点可以为游戏角色的当前位置对应的体素格子。
在本申请实施例中,具体地,体素文件在游戏制作阶段产生,并在游戏运行阶段基于游戏场景内的资源更新数据进行更新。
在该实施例中,体素文件是在游戏的制作阶段就已经产生的,游戏运行过程中若接收到寻路指令,可以直接对该体素文件进行调用,另外,在一些场景中,游戏内的资源可以更改,例如游戏场景内的物品可以移动、销毁、增加等等,在游戏内资源被更改产生资源更新数据时体素文件也应进行相应更新,进而寻路应基于更新后的体素文件进行,以免产生错误,例如对游戏场景内的物品移动到游戏内的一条可行走的路上,若仍按照原始体素文件寻路,可能会产生角色穿越该物品的错误现象发生。
其中,体素文件的生成步骤可以包括:步骤1,获取游戏场景的资源数据,其中,资源数据包括游戏场景内的游戏资源的资源水平位置数据以及与资源水平位置数据对应的资源上表面高度数据和资源下表面高度数据;步骤2,基于资源数据,确定与游戏场景匹配的每个区域块上对应体素的体素信息,并生成游戏场景的体素文件,其中,每个区域块上对应体素的体素信息为与区域块水平位置对应的资源水平位置数据以及资源上表面高度数据和资源下表面高度数据。
在上述实施例中,在实施本方法之前,应先针对该游戏场景,对该游戏场景下的体素进行定义,体素用于表示该游戏场景中的基本构成单元,游戏场景由至少一个体素构成。体素的具体生成方式可以采用现有技术实现,在一可选方式中,可以基于开源项目Recast实现,该项目由Mesh(网格)经过体素化、地区生成、轮廓生成、多边形网格生成、高度细节生成等步骤生成NavMesh,将Recast对Mesh体素化的代码抽出来即可生成体素。本申请实施例中,每个体素为一个长方体,游戏场景中的游戏资源模型完全由长方体拼成,每个体素的体素信息包括对应的长方体的上表面高度和下表面高度。在实际应用中,长方体表面(上表面和下表面)的面积大小可以根据实际需求配置,在一可选方式中,长方体表面的长度和宽度可以相等,也就是,上下表面的形状为正方形,例如,上下表面的长度和宽度可以为0.5m(米)。
在上述步骤1中,获取游戏场景中的游戏资源数据,游戏资源数据具体可以包括游戏场景中可以阻挡玩家移动的资源数据,例如石砖铺砌的地面、草地、房屋、城墙等等地形资源,比如玩家不可以穿墙、不可以穿越地面进入地下。在实际应用中,游戏场景中的树叶等不会阻挡玩家移动的资源不用于生成体素文件。游戏资源数据具体可以包含游戏资源的资源水平位置数据以及与该资源水平位置数据相对应的资源高度数据,为了减少体素文件数据量,资源高度数据通常通过资源上表面高度数据和资源下表面高度数据来描述,上表面高度和下表面高度之间的资源在实际游戏场景中一般会被填充,不需要直接显示出来。例如,一片由石砖铺砌的地面,该地面铺满A区域,那么地面资源对应的资源水平位置数据应包含A区域对应的水平位置,相应水平位置对应的资源下表面高度数据为石砖的下表面高度(例如为0),资源上表面高度数据为石砖的上表面高度(例如石砖厚度为20cm,那么上表面高度为20cm)。再例如,用于支撑房屋的柱子,该柱子竖直立在B区域,柱子对应的资源水平位置数据应包含B区域对应的水平位置,相应水平位置对应的资源上、下表面高度数据为该柱子的上、下表面的高度。通过上述方式可以描述出游戏场景内每个游戏资源在三维空间中的位置,从而可以利用这些位置信息生成游戏场景对应的体素文件。
具体地,资源上表面高度数据和资源下表面高度数据包括至少一对,同一资源水平位置对应的任一资源上表面高度数据与任一资源下表面高度数据互不相同,任意一对资源上表面高度数据和资源下表面高度数据用于描述相应资源水平位置出的游戏资源上、下表面高度。游戏资源应有一定的厚度,即任意一对游戏资源对应的上、下表面高度数据不同,并且游戏资源应该互不重叠,即同一水平位置上对应的任意一个资源上表面高度数据与任意一个资源下表面高度数据互不相同。
在上述步骤2中,针对于预先对游戏场景划分的体素,结合上述游戏资源数据,可以生成该游戏场景对应的体素文件,具体地,将游戏场景中的水平面按照体素形状、大小进行区域划分,在本申请实施例中,每个区域块包括游戏场景中水平面上的一块区域,每块区域的形状和大小为游戏场景中任一体素的上表面或下表面的形状和大小。例如,游戏场景对应的三维空间的长、宽、高分别是L、W、H,每个体素为1*1*1正方体,在平面上按照每个区域1*1的方式将平面空间划分成L*W个区域,按照现有技术中提供的方法,比如H为256的空间对应的区域划分方式是在每个平面单元区域上进行256个划分,每个平面单元区域对应256个数据。而本申请实施例中,在高度上不采用按单位格子划分的方式,而是将游戏资源按层划分。比如对于室外的草地或者山峰,它们虽然凹凸不平,但实际上只是一层的地形,只需要用地形的下表面和上表面的高度值表示,也就是一个平面单元区域,高度上只需要2个浮点数就能表示(下表面高度和上表面高度)。再比如稍微复杂些的地形,如:室内场景,有地板和屋顶,高度上也只有2层,每个平面单元区域用4个浮点数就可以表示(地板下表面高度、地板上表面高度、屋顶下表面高度和屋顶上表面高度)。例如,某个平面区域对应有地板资源和屋顶资源,该区域对应的地板资源下表面高度数据为0,上表面高度数据为0.2m,屋顶资源下表面高度数据为5m,上表面高度数据为5.5米,则表示该区域上方0~0.2m高度内有实物,5m~5.5m高度内有实物。
在实际应用中,对于一般的场景,大部分地方的地形都是一层的空间,因此稀疏化表示方式可以极大的提高了内存使用效率,而且在高度方向上可以使用更高精度的浮点数表示(不局限于以体素为单位,现有技术中对于高度的描述需要基于某个区域上对应的体素空间格子,游戏资源只有包含某个格子或者不包含某个格子两种情况,不能包含某个体素格子的一部分,而采用浮点数表示则不局限于该描述方式,也可以包含某个体素格子的一部分),这样的高度描述方式,在后续导出游戏场景时,可以使游戏资源在高度方向上更加平滑,从而提升地形表示的精度。稀疏化表示使基于体素的三维空间可以应用于对内存要求严格的手游,为该解决方案提供了技术的理论基础。
进一步的,体素文件基于游戏场景内的资源更新数据进行更新的步骤可以包括:步骤3,接收物品摆放请求,其中,物品摆放请求包括摆放前的物品体素信息以及摆放后的物品体素信息;步骤4,基于修改后的体素文件以及摆放后的物品体素信息,判断摆放后的物品体素信息与游戏资源对应的体素信息是否存在重合;步骤5,若不存在,则基于摆放前的物品体素信息以及摆放后的物品体素信息对游戏场景内的物品进行摆放并更新修改后的体素文件
在上述实施例中,导出游戏场景之后,玩家在游戏场景中体验时,玩家可以实现移动游戏场景内的一些游戏资源的动作,例如,移动游戏场景中某个房间的家具,比如可以将床摆放到房间中,同时将一个桌子摆放到床上,然后再将一个凳子摆放到桌子上。玩家可以对游戏场景内的物品先进行模拟摆放,基于玩家对物品的模拟摆放生成物品摆放请求,该请求中具体应包括物品模拟摆放前的位置信息即摆放前的物品体素信息以及物品模拟摆放后的位置信息即摆放后的物品体素信息,为了避免摆放的物品对游戏场景内的其他游戏资源造成碰撞,应先检查摆放后的物品体素信息与游戏场景对应的体素信息是否发生冲突,即摆放后的物品对应的每一个体素是否被游戏场景内的其他游戏资源占用,若未被其他游戏资源占用,则说明物品可以摆放到模拟摆放的位置上,进一步,可以对物品实现在游戏场景内的摆放,由于物品的摆放会对游戏空间内相应位置造成阻挡,在对物品进行摆放的同时还应对游戏场景的体素文件进行更新,移除摆放前的物品体素信息并增加摆放后的物品体素信息,另外,在网络游戏中玩家移动游戏内物品也会对其他玩家的游戏场景造成影响,因此还应将物品摆放产生的相应数据上传到游戏服务器中,由服务器向其他玩家的终端转发这些数据,从而实现其他玩家的客户端中对物品摆放数据的同步,完成服务器端体素文件以及其他玩家终端体素文件的更新,以免其他玩家终端侧的游戏场景数据不一致导致的游戏内错误。
步骤202,获取起始点体素格子对应的起始点连通分量以及目标点体素格子对应的目标点连通分量。
步骤203,若起始点连通分量与目标点连通分量相同,则基于起始点体素格子和目标点体素格子,确定与寻路指令对应的寻路路径的体素格子。
在步骤202至步骤203中,对于寻路算法来说,如果两点之间可达,通常能够快速地找到路径,但是不可达时,需要搜索周围所有潜在的点,在排除所有潜在可达点后才能判断搜索失败。而排除的过程几乎要搜索整个三维空间,极大的浪费CPU周期。为了解决这个问题,在游戏场景的编辑器导出阶段,可以计算出三维空间的所有连通分量,然后赋予每个连通分量一个ID,导出的数据中每个点都会记录该ID,在寻路前先检查起始点和目标点的连通分量ID是否一样,不一样表示不可达,从而快速失败,避免无效搜索,若连通分量ID一样则表示可达,可以进一步进行路径规划。
具体地,在游戏制作阶段,基于深度优先算法遍历体素文件对应游戏场景中的任意一点的可达点后将任意一点以及可达点设置相同的连通分量,并在游戏运行阶段基于游戏场景内的资源更新数据进行更新。
在上述实施例中,对于游戏场景对应的三维空间中可行走的体素格子点,如果两个点可以达到,则说明它们属于同一个连通分量。连通分量具有传递性,如果A点和B点属于同一个连通分量,同时B点和C点属于同一个连通分量,那么A点和C点必定属于同一个连通分量。在导出阶段对于所有格子上的点,根据临近格子是否可行走做深度优先遍历,然后对遍历过的点设置连通分量。通过给空间中的每个点设置连通分量,可以快速发现起始点与目标点不可达的问题,从而提高寻路效率,减少无用的CPU占用。另外,在游戏过程中,若玩家对游戏场景内的资源进行移动、销毁等操作,需要对资源更新数据相关体素格子点的连通分量进行更新。
本申请实施例还提供了一种寻路方法,具体地,如图3所示,步骤203可以包括:
步骤203-1,基于与游戏场景匹配的体素空间,确定起始点体素格子和目标点体素格子在体素空间中的起始节点和目标节点;
步骤203-2,将起始节点添加到开启列表中;
步骤203-3,判断开启列表中是否包含目标节点;
步骤203-4,若不包含,则从开启列表中取出F值最小的节点作为当前节点,并将当前节点加入到关闭列表中;
步骤203-5,搜索与当前节点相邻的可到达节点;
步骤203-6,若可到达节点存在于关闭列表中,则略过;
步骤203-7,若可到达节点存在于开启列表中,则检查通过当前节点到达可到达节点的F值是否更小,若更小则更新可到达节点的F值,并将当前节点设置为可到达节点的父节点;
步骤203-8,若可到达节点不在开启列表中,则将可到达节点加入开启列表中,并记录可到达节点的F值,将将当前节点设置为可到达节点的父节点;
步骤203-9,返回判断开启列表中是否包含目标节点,直至开启列表包含目标节点时,基于开启列表确定寻路路径;
其中,F值为相应节点到起始节点的实际代价值与相应节点到目标节点的预测代价值之和。
本申请实施例中的寻路方法采用A*寻路算法,图4给出了一个10*10的地图,黑色区域代表障碍物,空白区域表示可以通过。图中S处代表开始节点,D处代表目标节点,要求利用标准的A*算法进行路径搜索,找到一条从S到D的最优路径。采用C语言处理的话,把地图当成矩阵来读取,那么S的位置就是(l,0),D的位置就是(8,8)。
假设对每个节点进行垂直和水平四个方向的搜索。A*算法的估价函数f(n)=g(n)+h(n),其中,h(n)为相应节点n到起始节点的实际代价值,采用曼哈顿距离,即两点之间垂直方向和水平方向距离之和。g(n)为相应节点到目标节点的预测代价值。这里假设每两个相通的节点之间的代价为1。
h(n)=|X-X′|+|Y-Y′|
其中,X代表目标节点在地图中的横坐标,Y代表目标节点在地图中的纵坐标;X′代表起始节点在地图中的横坐标,Y′代表起始节点在地图中的纵坐标。
首先,把节点(l,0)放进Open表(开启列表)中,此时Open表中只有这一个点,它即是表中f值最低的节点,并把它放进Closed表(关闭列表)中,因为S点并不是要找的目标点,所以进行第三步操作,对它周围的四个邻接点进行A*搜索操作。节点s有三个相邻节点(0,0),(2,0),(l,l)。其中,节点(l,l)不可通过,则略过;节点(0,0),(2,0)可以通过,把它们添加到Open表中,并一记录它们的g值和f值。相邻节点都己经检查完毕,则返回第二步。
然后,重复第二步操作,检查f值最小的节点。节点(2,0)对应的g、h及f值为:g=1,h=|2-8|+|0-8|=14,f=g+h=15。节点(0,0)对应的g、h及f值为:g=1,h=|0-8|+|0-8|=16,f=g+h=17。可知,节点(2,0)是Open表中f值最小的那个点,把该点放入Closed表中并作为当前节点继续进行搜索操作,如此反复。
最后,路径搜索到节点(8,2),由于其相邻节点不可通过或者己经放入closed表中,略过;此时,需要重新判断Open表中的其他节点,并选出f值最小的节点作为当前节点继续搜索操作。通过计算可以得到节点(5,1)是符合条件的点,以此作为当前节点,其相邻的节点(5,0)和(6,l)己在Closed表中,略过;(5,2)是障碍物,不可通过,略过;节点(4,1)己经在Open表中,需要重新计算f值的大小,并跟原来的f值进行比较,可知,f的值比原来的要大,并不是最好的路径,也应该略过。此时,继续检查Open表,并重新查找f值最小的节点。同样的方法,可以得到节点(4,l),没有满足条件的相邻节点,继续回溯,此时Open表中只剩下一个节点(0,0),放入Closed表中,重新进行寻路操作。
最终,可以达到目标点(8,8),寻路成功。根据Closed表中节点的信息,进行反向提取,就可以得到一条从起始节点到目标节点的路径。即,由目标节点开始,根据目标节点的父节点向后回溯,得到从起始节点到目标节点的寻路路径。
本申请实施例不限于上述举例中的二维地图寻路,还可以实现三维空间寻路,现对于二维地图寻路算法,不同之处在于相邻可到达点的选取规则不同,具体地,上述步骤204-5可以包括:
步骤203-5-1,获取当前节点在水平面的预设水平方向上的相邻水平节点以及相邻水平节点对应的节点高度;
步骤203-5-2,若当前节点的节点高度与相邻水平节点的节点高度之差在预设高度差范围内,则将相邻水平节点确定为可到达节点。
在上述实施例中,基于体素表示的游戏场景三维空间中,首先,在水平面上寻找与当前节点相邻的体素格子,具体可以对相邻的体素格子的方向(即预设水平方向)做出规定,例如规定当前节点上下左右四个方向为预设水平方向,或者当前节点上下左右以及左上、左下、右上、右下总计8个方向为预设水平方向,基于预设水平方向可以找出当前节点在水平面上的相邻节点位置,进一步获取相邻水平节点对应的节点高度,从而根据当前节点的节点高度和该节点高度作比较判断该节点是否为可到达节点。例如,当前节点为(1,0)当前节点位置在游戏场景中为平地,平地高度为0.5m,坐标为(1,1)的节点位置是一根垂直放置的柱子(在这里暂时不考虑柱子是否可以站人的特殊性,只考虑从一个节点移动到相邻节点的合理性),柱子的高度为10m,一般来说,游戏角色在行进时,是无法在相邻的两个体素格子内从0.5m的高度跨越到10m的高度(简单来说,可以理解为从当前节点0.5m的高度直接移动到相邻的10m高度的节点是不合理的),这两个节点的高度差不在约定的合理范围(预设高度差)内,因此,坐标为(1,1)的节点不属于当前节点对应的可到达节点。
再例如,当前节点在游戏场景中对应平地,某个相邻节点在游戏场景中对应一级台阶,当前节点的高度为0.5m,相邻节点的高度为0.7m,游戏角色从平地移动到一级台阶是合理的,二者高度差在预设高度差范围内,则可以将这个相邻节点确定为可到达节点。
基于上述对可到达节点的选取规定,可以实现在游戏场景中,游戏角色可以实现在一定斜率范围内的地形上移动,例如可以在上下坡的上路上行走、可以在一根倾斜的风筝线上行走等等。
另外,为了加快寻路速度,还可以基于起始点和目标点先确定出初始寻路方向,该寻路方向为从起始点至目标点的向量方向。图7示出了本申请实施例提供的一种初始寻路方向示意图。如图7所示,(x1,y1)为起始点,(x2,y2)为目标点,确定该初始寻路方向以后,在如图3所示的方法中,当获取F值最小的节点时,若存在两个或两个以上的节点F值相同且最小,那么就可以基于该初始寻路方向来确定选取哪一个节点,具体来说,在步骤204-4中从开启列表中取出F值最小的节点,若存在两个节点的F值相同且最小,则判断起始节点到哪个节点的向量方向与该初始寻路方向更匹配,将更匹配的节点选取为开启列表中F值最小的节点,相比于现有技术中随机选取一个F值最小的节点或者按照节点获取顺序选取F值最小的节点来说,依据初始寻路方向进行选取,有助于更快的寻找到寻路路径,提高寻路效率。图8示出了本申请实施例提供的一种相邻节点可达规则的示意图。如图8所示,黑色线条表示相应格子内有阻挡,不能穿越,A、B、C、D、E、F、G、H分别代表其所在的体素格子节点。情况(1),若当前节点A与相邻节点B的高度差为正数,游戏角色可以从当前节点A跳落(或掉落)至相邻节点B,情况(2),若当前节点C与相邻节点的高度差在一定范围内,游戏角色可以从当前节点C逐步移动到节点D,情况(3),当前节点E可以通过相邻节点F飞到节点A,情况(4),当前节点G与相邻节点H的高度差不在预设范围内,当前节点G向相邻节点H移动失败。图9示出了本申请实施例提供的一种寻路路径示意图。如图9所示,寻路后,游戏角色可以沿地面显示路径从当前位置移动到目标位置。
步骤204,按照游戏场景对应的至少一种区域类型,将寻路路径划分为至少一个路径段,其中,每个路径段对应一种区域类型,相邻的两个路径段对应的区域类型不同,不同的区域类型对应的行进方式不同;
步骤205,基于路径段以及与路径段匹配的行进方式文件,确定游戏角色在路径段上的行进方式。
在步骤204和步骤205中,为了加快行进方式的选取速度,可以对游戏场景内的地形类型进行实际意义上的划分,例如将河流的范围圈定出来并规定河流只可以划船行进,再例如将城池的范围圈定出来并规定城池只可以步行,再例如野外可以步行、轻功、骑乘坐骑多种行进方式。行进方式文件可以基于地形类型的实际意义创建,例如某个范围对应的行进方式为步行,在确定寻路路径以后,基于预先对游戏场景中区域类型的划分,将寻路路径基于该区域类型划分为多个路径段,例如寻路路径的起始点从野外开始,穿越河流后进入城池范围内,目的地在城池中,那么寻路路径可以划分为三段,第一段是从起始点到河流前的路径,第二段是跨越河流的路径,第三段跨越河流以后到目标点的路径。路径段还可以基于寻路路径的体素格子对应的高度信息进行划分,将在一定高度范围内的相邻路径体素格子划分在同一个路径段,行进方式文件中的行进方式可以基于体素格子的高度信息创建,例如,某个体素格子对应的高度信息为0.2,0.2是地面上表面高度,那么在该体素格子上行进为地面行进,地面行进方式包括步行、骑乘宠物等等,从而通过调用行进方式文件确定每个路径段的行进方式。路径段还可以基于寻路路径的体素格子对应的实际意义来划分,行进方式文件中的行进方式可以基于体素格子的实际意义创建,例如节点M、N为地面,节点P、Q为水面,节点X、Y为空中,那么在行进方式文件中节点M、N被标记为地面,地面对应的行进方式为步行、骑乘坐骑等,节点P、Q被标记为水面,水面对应的行进方式为划船,节点X、Y被标记为空中,空中对应的行进方式为轻功,从而通过调用行进方式文件确定每段路径的行进方式。基于对路径段的划分可以为每段路径匹配相应的行进方式,例如按照上文中的约定,第二段可以采用划船行进的方式,第三段可以采用步行的方式,值得注意的是第一段路径,由于第一段路径为野外,可以采用步行、轻功、骑乘坐骑等多种行进方式,具体如何选择,本申请实施例作出了以下规定:
具体地,若任一路径段匹配的行进方式文件包括至少两种行进方式,则分别计算按照每种行进方式在任一路径段上行进所需的代价,并选取代价最小的行进方式作为任一路径段对应的行进方式。其中,代价包括时间代价和/或经济代价。
在该实施例中,第一段路径对应多种行进方式,可以基于玩家预先的设定,例如玩家事先设定时间优先,则可以为第一段路径匹配速度最快的行进方式,假设轻功速度最快,则可以为第一段路径选取轻功作为行进方式。又例如玩家事先设定经济代价优先,则可以为第一段路径匹配最经济的行进方式,假设步行不需要经济消耗、轻功需要损耗内力、骑乘坐骑需要损耗骑宠粮食,那么可以为第一段路径匹配步行的行进方式。又例如玩家事先设定性价比优先,则可以进一步计算若选择轻功飞行第一段路径需要消耗的内力值,将内力值折算为游戏金币,再计算若选择骑乘坐骑需要消耗的骑宠粮食量,并折算为游戏金币,进而选择一种性价比最高的方案,以满足玩家多样化的游戏需求。
进一步的,作为图1方法的具体实现,本申请实施例提供了一种游戏寻路装置,如图5所示,该装置包括:
寻路指令接收模块31,用于接收寻路指令,并查询体素文件获取与寻路指令对应的起始点体素格子和目标点体素格子;
寻路模块32,用于基于起始点体素格子和目标点体素格子,确定与寻路指令对应的寻路路径的体素格子;
行进方式确定模块33,用于根据寻路路径的体素格子,确定游戏角色在寻路路径上的行进方式。
在一些应用场景中,具体地,体素文件在游戏制作阶段产生,并在游戏运行阶段基于游戏场景内的资源更新数据进行更新。
在一些应用场景中,具体地,如图6所示,该装置还包括:
连通分量获取模块34,用于确定与寻路指令对应的寻路路径的体素格子之前,获取起始点体素格子对应的起始点连通分量以及目标点体素格子对应的目标点连通分量;
寻路模块32,还用于若起始点连通分量与目标点连通分量相同,则执行基于起始点和目标点,确定与寻路指令对应的寻路路径。
在一些应用场景中,具体地,在游戏制作阶段,基于深度优先算法遍历体素文件对应游戏场景中的任意一点的可达点后将任意一点以及可达点设置相同的连通分量,并在游戏运行阶段基于游戏场景内的资源更新数据进行更新。
在一些应用场景中,具体地,如图6所示,寻路模块32,具体包括:
节点确定单元321,用于基于与游戏场景匹配的体素空间,确定起始点体素格子和目标点体素格子在体素空间中的起始节点和目标节点;
开启列表确定单元322,用于将起始节点添加到开启列表中;
开启列表判断单元323,用于判断开启列表中是否包含目标节点;
关闭列表确定单元324,用于若不包含,则从开启列表中取出F值最小的节点作为当前节点,并将当前节点加入到关闭列表中;
可到达节点确定单元325,用于搜索与当前节点相邻的可到达节点;
第一节点处理单元326,用于若可到达节点存在于关闭列表中,则略过;
第二节点处理单元327,用于若可到达节点存在于开启列表中,则检查通过当前节点到达可到达节点的F值是否更小,若更小则更新可到达节点的F值,并将当前节点设置为可到达节点的父节点;
第三节点处理单元328,用于若可到达节点不在开启列表中,则将可到达节点加入开启列表中,并记录可到达节点的F值,将将当前节点设置为可到达节点的父节点;
寻路路径单元329,用于返回判断开启列表中是否包含目标节点,直至开启列表包含目标节点时,基于开启列表确定寻路路径;
其中,F值为相应节点到起始节点的实际代价值与相应节点到目标节点的预测代价值之和。
在一些应用场景中,具体地,寻路路径单元329,具体用于:由目标节点开始,根据目标节点的父节点向后回溯,得到从起始节点到目标节点的寻路路径。
在一些应用场景中,具体地,图中未示出,可到达节点确定单元325,具体包括:
相邻节点获取子单元3251,用于获取当前节点在水平面的预设水平方向上的相邻水平节点以及相邻水平节点对应的节点高度;
可到达节点确定子单元3252,用于若当前节点的节点高度与相邻水平节点的节点高度之差在预设高度差范围内,则将相邻水平节点确定为可到达节点。
在一些应用场景中,具体地,如图6所示,行进方式确定模块33,具体包括:
路径段划分单元331,用于按照游戏场景对应的至少一种区域类型,将寻路路径划分为至少一个路径段,其中,每个路径段对应一种区域类型,相邻的两个路径段对应的区域类型不同,不同的区域类型对应的行进方式不同;
行进方式确定单元332,用于基于路径段以及与路径段匹配的行进方式文件,确定游戏角色在路径段上的行进方式。
在一些应用场景中,具体地,行进方式确定单元332,具体用于:
若任一路径段匹配的行进方式文件包括至少两种行进方式,则分别计算按照每种行进方式在任一路径段上行进所需的代价,并选取代价最小的行进方式作为任一路径段对应的行进方式。
在一些应用场景中,具体地,代价包括时间代价和/或经济代价。
在一些应用场景中,具体地,如图6所示,寻路指令接收模块31,具体用于:基于接收到的对游戏界面中预设可寻路位置的点击,生成寻路指令,其中,预设可寻路位置包括但不限于游戏场景地图或文字链接,目标点体素格子包括点击的有游戏场景地图中的任意位置对应的体素格子或文字链接的对应位置的体素格子,起始点体素格子包括游戏角色的当前位置对应的体素格子。
需要说明的是,本申请实施例提供的一种游戏寻路装置所涉及各功能单元的其他相应描述,可以参考图1至图4中的对应描述,在此不再赘述。
基于上述如图1至图4所示方法,相应的,本申请实施例还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述如图1至图4所示的游戏寻路方法。
基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
基于上述如图1至图4所示的方法,以及图5、图6所示的虚拟装置实施例,为了实现上述目的,本申请实施例还提供了一种计算机设备,具体可以为个人计算机、服务器、网络设备等,该计算机设备包括存储介质和处理器;存储介质,用于存储计算机程序;处理器,用于执行计算机程序以实现上述如图1至图4所示的游戏寻路方法。
可选地,该计算机设备还可以包括用户接口、网络接口、摄像头、射频(RadioFrequency,RF)电路,传感器、音频电路、WI-FI模块等等。用户接口可以包括显示屏(Display)、输入单元比如键盘(Keyboard)等,可选用户接口还可以包括USB接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如蓝牙接口、WI-FI接口)等。
本领域技术人员可以理解,本实施例提供的一种计算机设备结构并不构成对该计算机设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储介质中还可以包括操作***、网络通信模块。操作***是管理和保存计算机设备硬件和软件资源的程序,支持信息处理程序以及其它软件和/或程序的运行。网络通信模块用于实现存储介质内部各组件之间的通信,以及与该实体设备中其它硬件和软件之间通信。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以借助软件加必要的通用硬件平台的方式来实现,也可以通过硬件实现在接收到寻路指令之后,对寻路指令进行解析获取对应的起始点和目标点,从而基于起始点和目标点在游戏场景内确定寻路路径,进一步还可以确定游戏角色在寻路路径上的行进方式,以使游戏角色在寻路路径上按照相应的行进方式行进。本申请实施例可以确定游戏角色在寻路路径上的行进方式,相比于现有技术中按照既定初始行进方式完成寻路的方式相比,一方面可以有效提高寻路路径确定后游戏角色的寻路成功率,避免了既定行进方式与寻路路径不匹配导致游戏角色无法行进的情况发生,另一方面可以基于玩家需求为寻路路径匹配合适的行进方式,以减少游戏角色的寻路时间、经济等成本,提高玩家游戏体验。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本申请序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。

Claims (13)

1.一种游戏寻路方法,其特征在于,包括:
接收寻路指令,并查询体素文件获取与所述寻路指令对应的起始点体素格子和目标点体素格子;
基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子;
根据所述寻路路径的体素格子,确定游戏角色在所述寻路路径上的行进方式;
其中,所述基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子,包括:
基于与游戏场景匹配的体素空间,确定所述起始点体素格子和所述目标点体素格子在所述体素空间中的起始节点和目标节点;
将所述起始节点添加到开启列表中;
判断所述开启列表中是否包含所述目标节点;
若不包含,则从所述开启列表中取出F值最小的节点作为当前节点,并将所述当前节点加入到关闭列表中;
搜索与所述当前节点相邻的可到达节点;
若所述可到达节点存在于所述关闭列表中,则略过;
若所述可到达节点存在于所述开启列表中,则检查通过所述当前节点到达所述可到达节点的F值是否更小,若更小则更新所述可到达节点的F值,并将所述当前节点设置为所述可到达节点的父节点;
若所述可到达节点不在所述开启列表中,则将所述可到达节点加入所述开启列表中,并记录所述可到达节点的F值,将所述当前节点设置为所述可到达节点的父节点;
返回判断所述开启列表中是否包含所述目标节点,直至所述开启列表包含所述目标节点时,基于所述开启列表确定所述寻路路径;
其中,F值为相应节点到所述起始节点的实际代价值与相应节点到所述目标节点的预测代价值之和。
2.根据权利要求1所述的方法,其特征在于,所述体素文件在游戏制作阶段产生,并在游戏运行阶段基于游戏场景内的资源更新数据进行更新。
3.根据权利要求2所述的方法,其特征在于,所述确定与所述寻路指令对应的寻路路径的体素格子之前,所述方法还包括:
获取所述起始点体素格子对应的起始点连通分量以及所述目标点体素格子对应的目标点连通分量;
若所述起始点连通分量与所述目标点连通分量相同,则执行所述基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子。
4.根据权利要求3所述的方法,其特征在于,在游戏制作阶段,基于深度优先算法遍历所述体素文件对应游戏场景中的任意一点的可达点后将所述任意一点以及所述可达点设置相同的连通分量,并在游戏运行阶段基于所述游戏场景内的所述资源更新数据进行更新。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述搜索与所述当前节点相邻的可到达节点,具体包括:
获取所述当前节点在水平面的预设水平方向上的相邻水平节点以及所述相邻水平节点对应的节点高度;
若所述当前节点的节点高度与所述相邻水平节点的节点高度之差在预设高度差范围内,则将所述相邻水平节点确定为所述可到达节点。
6.根据权利要求5所述的方法,其特征在于,所述基于所述开启列表确定所述寻路路径,具体包括:
由所述目标节点开始,根据所述目标节点的父节点向后回溯,得到从所述起始节点到所述目标节点的寻路路径。
7.根据权利要求1至4中任一项所述的方法,其特征在于,所述根据所述寻路路径的体素格子,确定游戏角色在所述寻路路径上的行进方式,具体包括:
按照游戏场景对应的至少一种区域类型,将所述寻路路径划分为至少一个路径段,其中,每个所述路径段对应一种区域类型,相邻的两个路径段对应的区域类型不同,不同的区域类型对应的行进方式不同;
基于所述路径段以及与所述路径段匹配的行进方式文件,确定所述游戏角色在所述路径段上的行进方式。
8.根据权利要求7所述的方法,其特征在于,所述基于所述路径段以及与所述路径段匹配的行进方式文件,确定所述游戏角色在所述路径段上的行进方式,具体包括:
若任一路径段匹配的行进方式文件包括至少两种行进方式,则分别计算按照每种行进方式在所述任一路径段上行进所需的代价,并选取代价最小的行进方式作为所述任一路径段对应的行进方式。
9.根据权利要求8所述的方法,其特征在于,所述代价包括时间代价和/或经济代价。
10.根据权利要求1至4中任一项所述的方法,其特征在于,所述接收寻路指令,具体包括:
基于接收到的对游戏界面中预设可寻路位置的点击,生成所述寻路指令,其中,所述预设可寻路位置包括但不限于游戏场景地图或文字链接,所述目标点体素格子包括点击的所述游戏场景地图中的任意位置对应的体素格子或所述文字链接的对应位置的体素格子,所述起始点体素格子包括游戏角色的当前位置对应的体素格子。
11.一种游戏寻路装置,其特征在于,包括:
寻路指令接收模块,用于接收寻路指令,并查询体素文件获取与所述寻路指令对应的起始点体素格子和目标点体素格子;
寻路模块,用于基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子;
行进方式确定模块,用于根据所述寻路路径的体素格子,确定游戏角色在所述寻路路径上的行进方式;
所述寻路模块,具体用于:基于所述起始点体素格子和所述目标点体素格子,确定与所述寻路指令对应的寻路路径的体素格子,包括:
基于与游戏场景匹配的体素空间,确定所述起始点体素格子和所述目标点体素格子在所述体素空间中的起始节点和目标节点;
将所述起始节点添加到开启列表中;
判断所述开启列表中是否包含所述目标节点;
若不包含,则从所述开启列表中取出F值最小的节点作为当前节点,并将所述当前节点加入到关闭列表中;
搜索与所述当前节点相邻的可到达节点;
若所述可到达节点存在于所述关闭列表中,则略过;
若所述可到达节点存在于所述开启列表中,则检查通过所述当前节点到达所述可到达节点的F值是否更小,若更小则更新所述可到达节点的F值,并将所述当前节点设置为所述可到达节点的父节点;
若所述可到达节点不在所述开启列表中,则将所述可到达节点加入所述开启列表中,并记录所述可到达节点的F值,将所述当前节点设置为所述可到达节点的父节点;
返回判断所述开启列表中是否包含所述目标节点,直至所述开启列表包含所述目标节点时,基于所述开启列表确定所述寻路路径;
其中,F值为相应节点到所述起始节点的实际代价值与相应节点到所述目标节点的预测代价值之和。
12.一种存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现权利要求1至10中任一项所述的游戏寻路方法。
13.一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至10中任一项所述的游戏寻路方法。
CN202010602476.8A 2020-06-29 2020-06-29 游戏寻路方法及装置、存储介质、计算机设备 Active CN111714892B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010602476.8A CN111714892B (zh) 2020-06-29 2020-06-29 游戏寻路方法及装置、存储介质、计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010602476.8A CN111714892B (zh) 2020-06-29 2020-06-29 游戏寻路方法及装置、存储介质、计算机设备

Publications (2)

Publication Number Publication Date
CN111714892A CN111714892A (zh) 2020-09-29
CN111714892B true CN111714892B (zh) 2024-04-12

Family

ID=72569420

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010602476.8A Active CN111714892B (zh) 2020-06-29 2020-06-29 游戏寻路方法及装置、存储介质、计算机设备

Country Status (1)

Country Link
CN (1) CN111714892B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113521741B (zh) * 2020-10-23 2024-02-23 腾讯科技(深圳)有限公司 自动生成地图区域链接的方法、装置、设备及存储介质
CN112295225B (zh) * 2020-11-02 2021-08-10 不鸣科技(杭州)有限公司 一种寻路网格的多线程更新方法
CN112221144B (zh) * 2020-11-03 2024-03-15 网易(杭州)网络有限公司 三维场景寻路方法及装置、三维场景地图处理方法及装置
CN112473142A (zh) * 2020-11-06 2021-03-12 杭州电魂网络科技股份有限公司 渐进式寻路的方法、***、电子装置和存储介质
CN112657190A (zh) * 2020-12-28 2021-04-16 北京像素软件科技股份有限公司 一种游戏角色的寻路方法、装置及计算机设备
CN112999658B (zh) * 2021-02-22 2023-12-05 珠海剑心互动娱乐有限公司 用于游戏三维空间飞行的寻路方法、装置及介质
CN113082719B (zh) * 2021-04-30 2022-07-29 腾讯科技(深圳)有限公司 三维虚拟场景的寻路方法、装置及电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018200332A1 (en) * 2017-04-25 2018-11-01 GeoFrenzy, Inc. Systems, methods and apparatus for geofence networks
CN109432776A (zh) * 2018-09-21 2019-03-08 苏州蜗牛数字科技股份有限公司 一种空间自由寻路方法
CN109701273A (zh) * 2019-01-16 2019-05-03 腾讯科技(北京)有限公司 游戏数据的处理方法、装置、电子设备及可读存储介质
CN110812844A (zh) * 2019-11-06 2020-02-21 网易(杭州)网络有限公司 一种游戏中的寻路方法、终端及可读存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10062203B2 (en) * 2015-12-18 2018-08-28 Autodesk, Inc. Voxelization of mesh representations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018200332A1 (en) * 2017-04-25 2018-11-01 GeoFrenzy, Inc. Systems, methods and apparatus for geofence networks
CN109432776A (zh) * 2018-09-21 2019-03-08 苏州蜗牛数字科技股份有限公司 一种空间自由寻路方法
CN109701273A (zh) * 2019-01-16 2019-05-03 腾讯科技(北京)有限公司 游戏数据的处理方法、装置、电子设备及可读存储介质
CN110812844A (zh) * 2019-11-06 2020-02-21 网易(杭州)网络有限公司 一种游戏中的寻路方法、终端及可读存储介质

Also Published As

Publication number Publication date
CN111714892A (zh) 2020-09-29

Similar Documents

Publication Publication Date Title
CN111714892B (zh) 游戏寻路方法及装置、存储介质、计算机设备
CN106075906B (zh) 一种模拟对象的寻路方法、场景的搭建方法和对应的装置
CN110523081A (zh) 导航寻路路径的规划方法及装置
CN108463273A (zh) 基于游戏者的移动历史来进行非游戏者角色的路径寻找的游戏***等
CN109782737A (zh) 无人车模拟测试方法和***
CN112090078B (zh) 游戏角色移动控制方法、装置、设备和介质
JP7277671B2 (ja) スパニングツリーを用いたセル結合による領域分割 本開示は、一般に、領域分割に関し、特に、位置情報ゲームで使用するための異なる地域の特定に関するものである。
CN111202985B (zh) 2d游戏中的路径规划方法、***及电子设备
CN110292773A (zh) 一种角色运动跟随方法及装置、计算设备及存储介质
CN116050689B (zh) 一种广域空间铁路线路智能搜索方法、***、终端及介质
He et al. Research and application of path-finding algorithm based on unity 3D
CN113082719B (zh) 三维虚拟场景的寻路方法、装置及电子设备
CN112948515B (zh) 基于定位技术的轨迹映射方法、装置、设备及存储介质
CN108120445A (zh) 一种运动信息的处理方法及其装置、智能终端
CN116764225A (zh) 一种高效寻路的处理方法、装置、设备及介质
CN112546630B (zh) 角色移动方法及装置
De Chiara et al. Real positioning in virtual environments using game engines
CN112515554B (zh) 一种机器人行走路径搜索方法及电子设备
Dai et al. Check for updates Research on the Application of Computerized Parametric Design in the Site Selection Analysis of Pocket Park Design
CN112717405B (zh) 一种路径确定方法与装置
Petryshyn et al. Deep Reinforcement Learning for Autonomous Driving in Amazon Web Services DeepRacer
CN117101141A (zh) 寻路方法、装置、电子设备以及计算机可读存储介质
CN117732072A (zh) 跨层寻路方法、装置、计算机设备及可读存储介质
CN115601521B (zh) 一种路径处理方法、电子设备、存储介质及程序产品
CN110523082B (zh) 基于虚拟环境的虚拟道路计算方法、装置、设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant