CN105653271A - 行为树的静态解析、执行以及优化方法和装置 - Google Patents
行为树的静态解析、执行以及优化方法和装置 Download PDFInfo
- Publication number
- CN105653271A CN105653271A CN201511005196.4A CN201511005196A CN105653271A CN 105653271 A CN105653271 A CN 105653271A CN 201511005196 A CN201511005196 A CN 201511005196A CN 105653271 A CN105653271 A CN 105653271A
- Authority
- CN
- China
- Prior art keywords
- node
- behavior tree
- script file
- file
- function
- 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.)
- Granted
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 22
- 238000000034 method Methods 0.000 title claims description 135
- 238000005457 optimization Methods 0.000 title claims description 24
- 230000003068 static effect Effects 0.000 title abstract description 29
- 230000006399 behavior Effects 0.000 claims description 384
- 230000006870 function Effects 0.000 claims description 209
- 230000008569 process Effects 0.000 claims description 34
- 230000009471 action Effects 0.000 claims description 31
- 230000008676 import Effects 0.000 claims description 18
- 238000005034 decoration Methods 0.000 claims description 12
- 230000003542 behavioural effect Effects 0.000 claims 9
- 230000006872 improvement Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 16
- 230000015654 memory Effects 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种静态解析行为树的方法,包括:依次读取原始行为树文件中的至少部分连续节点的节点信息;根据读取到的所述至少部分连续节点中的第一个节点的节点信息生成空的脚本文件;依次将读取到的每一个节点的节点信息生成对应的节点函数并写入所述脚本文件中,从而得到用于解析所述原始行为树文件的至少部分连续节点的脚本文件。本发明公开的静态解析行为树的方法有效提高行为树执行效率、并降低行为树执行消耗。
Description
技术领域
本发明涉及游戏技术领域,尤其涉及一种静态解析行为树的方法和装置、行为树执行方法和装置、行为树运行优化方法和装置、在游戏运行中执行行为树的方法和装置、以及在游戏运行中执行行为树的优化方法和装置。
背景技术
在现有技术中,行为树通常使用运行时动态解析的工作方式。比如在即时对战类游戏中,非玩家控制的战斗单位每帧都会调用一次行为树来执行自己的逻辑,调用的过程会解析一次行为树节点的参数,据此决定行为。当游戏场景中存在的战斗单位很多时,执行行为树将占用大量CPU时间,严重影响游戏的运行效率。根据实际的统计数据,在一个帧率为30的即时对战类游戏中,战场中同时存在的战斗单位总数大概在20到30个,按每个战斗单位每帧执行一次行为树来计算,游戏每秒钟将执行约1000次行为树,占用了整个客户端运行时间的30%-40%。其中20%-25%来自于解析参数,10%左右来自于行为树节点的相互调用,5%左右是其他消耗。解析参数的消耗是最大的,原因主要是参数类型的多样性,例如,一个节点要判断一定范围L内的敌方单位不大于N,那么行为树执行到这个节点时的解析逻辑是:取出参数L;根据L选取周围的敌方单位;获得周围的敌方单位数目n;解析出“不大于”的含义和参数N;判断n是否大于N,并将结果返回给上一层节点。注意到上述过程的每一步都是不确定的,特别是判断“不大于”这个操作,在解析节点中根据这里的内容,可能会执行不同的逻辑。特别地,当每一帧都要重复解析每个节点的时候,占用的时间会非常大,从而导致游戏逻辑卡顿。
在某些应用中也会用到一些优化方法,比如针对相同的参数,记住上次的执行结果。但是这种方法适用范围有限,只能针对特定的节点实现,并且难于调试,在出现了错误的时候难以定位,如果行为树节点的参数填写有误,也没有办法及时发现,给程序调试增加比较大的困难。
发明内容
本发明所要解决的问题是:如何有效提高行为树执行效率、并降低行为树执行消耗。
为了实现上述目的,本发明实施例提供了一种静态解析行为树的方法,包括:
依次读取原始行为树文件中的至少部分连续节点的节点信息;
根据读取到的所述至少部分连续节点中的第一个节点的节点信息生成空的脚本文件;
依次将读取到的每一个节点的节点信息生成对应的节点函数并写入所述脚本文件中,从而得到用于解析所述原始行为树文件的至少部分连续节点的脚本文件。
作为上述方案的改进,所述至少部分连续节点包括根节点;
所述根据读取到的所述至少部分连续节点中的第一个节点的节点信息生成空的脚本文件具体为:
根据所述根节点的节点信息对应生成所述空的脚本文件。
作为上述方案的改进,所述至少部分连续节点包括所述原始行为树文件中的全部节点;
所述依次将读取到的每一个节点的节点信息生成对应的节点函数并写入空的脚本文件中,从而得到用于解析所述原始行为树文件的至少部分连续节点的脚本文件具体包括步骤:
当读取到的节点为根节点时,根据所述根节点的节点信息在所述脚本文件中生成对应的入口函数;
当读取到的节点为子节点时,根据所述子节点的节点信息在所述脚本文件中生成对应的节点函数;
当在所述脚本文件中生成全部节点所对应的节点函数时,得到用于解析所述原始行为树文件的完整脚本文件。
作为上述方案的改进,所述节点信息包括节点类型、节点名称和节点参数;其中,
节点类型包括根节点、装饰节点、动作节点以及条件节点,每一节点的节点类型决定了该节点生成函数时的调用关系;
每一节点的节点名称决定了该节点生成函数时所用的生成规则;
每一节点的节点参数决定了该节点生成函数的具体内容。
作为上述方案的改进,所述脚本文件的文件名以原始行为树文件中的根节点的编号命名。
作为上述方案的改进,还包括:
当读取到的节点引用了其他行为树模块的功能或者使用了全局变量,则在所述脚本文件的文件头部增加相应的模块引用语句或变量声明。
作为上述方案的改进,如果同一个原始行为树文件中存在多个节点引用相同的模块,则将生成的模块引用语句合并;如果同一个原始行为树文件中存在多个节点声明变量,则将节点编号作为变量名后缀。
作为上述方案的改进,还包括:
当读取到的节点需要跳转到另一行为树去执行,则在所述脚本文件的文件头部生成对另一行为树的引用语句,并在生成的节点函数中加入对另一行为树所对应的入口函数的调用。
作为上述方案的改进,还包括:
将所述完整脚本文件存储。
本发明实施例还提供了一种行为树执行方法,其中,执行的行为树文件中的至少部分连续节点通过如上所述的静态解析行为树的方法进行静态解析后得到相应的脚本文件,所述行为树执行方法包括步骤:
当读取到行为树文件中的所述至少部分连续节点时,获取相应的脚本文件并顺序执行所述脚本文件中的每一个函数;
当读取到行为树文件中的其他节点时,动态解析每一其他节点的节点信息后再执行。
本发明实施例还提供了一种行为树执行方法,包括:
根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如上所述的静态解析行为树的方法所生成的用于解析原始行为树文件的完整脚本文件;
顺序执行所述脚本文件中的每一个函数。
作为上述方案的改进,所述预先设置的执行顺序具体为:
通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。
本发明实施例还提供了一种行为树运行优化方法,包括:
利用如上所述的静态解析行为树的方法对原始行为树文件提前进行解析,生成对应的脚本文件;
在行为树运行时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数。
本发明实施例还提供了一种在游戏运行中执行行为树的方法,包括:
根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如上所述的静态解析行为树的方法所生成的用于解析原始行为树文件的完整脚本文件;
顺序执行所述脚本文件中的每一个函数,并响应相应的游戏动作。
本发明实施例还提供了一种在游戏运行中执行行为树的优化方法,包括:
利用如上所述的静态解析行为树的方法对原始行为树文件提前进行解析,生成对应的脚本文件;
在游戏运行中执行行为树时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数及响应相应的游戏动作。
本发明实施例对应提供了一种静态解析行为树的装置,包括:
原始行为树读取模块,用于依次读取原始行为树文件中的至少部分连续节点的节点信息;
脚本文件生成模块,用于根据读取到的所述至少部分连续节点中的第一个节点的节点信息生成空的脚本文件;
节点函数生成模块,用于依次将读取到的每一个节点的节点信息生成对应的节点函数并写入所述脚本文件中,从而得到用于解析所述原始行为树文件的至少部分连续节点的脚本文件。
作为上述方案的改进,所述至少部分连续节点包括根节点;所述脚本文件生成模块具体用于:根据所述根节点的节点信息对应生成所述空的脚本文件。
作为上述方案的改进,所述至少部分连续节点包括所述原始行为树文件中的全部节点;所述节点函数生成模块具体包括:
入口函数生成单元,用于当读取到的节点为根节点时,根据所述根节点的节点信息在所述脚本文件中生成对应的入口函数;
子节点函数生成单元,用于当读取到的节点为子节点时,根据所述子节点的节点信息在所述脚本文件中生成对应的节点函数;
当在所述脚本文件中生成全部节点所对应的节点函数时,得到用于解析所述原始行为树文件的完整脚本文件。
作为上述方案的改进,所述节点信息包括节点类型、节点名称和节点参数;其中,
节点类型包括根节点、装饰节点、动作节点以及条件节点,每一节点的节点类型决定了该节点生成函数时的调用关系;
每一节点的节点名称决定了该节点生成函数时所用的生成规则;
每一节点的节点参数决定了该节点生成函数的具体内容。
作为上述方案的改进,所述脚本文件的文件名以原始行为树文件中的根节点的编号命名。
作为上述方案的改进,还包括:
全局引用模块,用于当原始行为树读取模块读取到的节点引用了其他行为树模块的功能或者使用了全局变量,则在所述脚本文件的文件头部增加相应的模块引用语句或变量声明。
作为上述方案的改进,所述全局引用模块进一步用于:
如果同一个原始行为树文件中存在多个节点引用相同的模块,则将生成的模块引用语句合并;如果同一个原始行为树文件中存在多个节点声明变量,则将节点编号作为变量名后缀。
作为上述方案的改进,还包括:
外部行为树调用模块,用于当读取到的节点需要跳转到另一行为树去执行,则在所述脚本文件的文件头部生成对另一行为树的引用语句,在生成的节点函数中加入对另一行为树所对应的入口函数的调用。
作为上述方案的改进,还包括:
存储模块,用于将所述完整脚本文件存储。
本发明实施例还对应提供了一种行为树执行装置,其中,执行的行为树文件中的至少部分连续节点通过如上所述的静态解析行为树的装置进行静态解析后得到相应的脚本文件,所述行为树执行装置包括:
脚本文件读取及执行模块,用于当读取到行为树文件中的所述至少部分连续节点时,获取相应的脚本文件并顺序执行所述脚本文件中的每一个函数;
动态解析及执行模块,用于当读取到行为树文件中的其他节点时,动态解析每一其他节点的节点信息后再执行。
本发明实施例还对应提供了一种行为树执行装置,包括:
脚本文件读取模块,用于根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如上所述的静态解析行为树的装置所生成的用于解析原始行为树文件的完整脚本文件;
脚本文件执行模块,用于顺序执行所述脚本文件中的每一个函数。
作为上述方案的改进,所述预先设置的执行顺序是指:
通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。
本发明实施例还对应提供了一种行为树运行优化装置,包括:
静态解析行为树模块,利用如上所述的静态解析行为树的装置对原始行为树文件提前进行解析,生成对应的脚本文件;
执行模块,用于在行为树运行时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数。
本发明实施例还对应提供了一种行为树运行优化装置,包括:
静态解析行为树模块,利用如上所述的静态解析行为树的方法对原始行为树文件提前进行解析,生成对应一种在游戏运行中执行行为树的装置,包括:
脚本文件读取模块,根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如上所述的静态解析行为树的装置所生成的用于解析原始行为树文件的完整脚本文件;
脚本文件执行模块,用于顺序执行所述脚本文件中的每一个函数,并响应相应的游戏动作。
本发明实施例还对应提供了一种在游戏运行中执行行为树的优化装置,包括:
静态解析行为树模块,利用如上所述的静态解析行为树的装置对原始行为树文件提前进行解析,生成对应的脚本文件;
执行模块,用于在游戏运行中执行行为树时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数及响应相应的游戏动作。
与现有技术相比,本发明实施例公开的静态解析行为树的方法和装置、行为树执行方法和装置、行为树运行优化方法和装置、在游戏运行中执行行为树的方法和装置、以及在游戏运行中执行行为树的优化方法和装置,通过将现有技术中需要在游戏运行中动态解析的行为树节点进行提前解析,并翻译为静态的函数,且所有节点参数都被翻译为常量,因此在应用(游戏)运行过程中只需要直接执行解析后的函数即可,不需要解析任何参数,可以大幅度减少行为树的执行时间,提高行为树运行效率,并降低行为树执行消耗。另外,每个节点对应一个独立的函数,便于跟踪和定位运行时的错误;而且参数被提前解析,因此可以在生成静态函数的时候检查参数的合法性,并提前排除一些错误,从而提高行为树运行的准确性。
附图说明
图1是本发明实施例1提供的静态解析行为树的方法的流程图。
图2是本发明实施例2提供的静态解析行为树的方法的流程图。
图3是本发明实施例3提供的行为树执行方法的流程图。
图4是本发明实施例4提供的行为树运行优化方法的流程图。
图5是本发明实施例5提供的在游戏运行中执行行为树的方法的流程图。
图6是本发明实施例6提供的在游戏运行中执行行为树的优化方法的流程图。
图7是本发明实施例7提供的静态解析行为树的装置的结构框图。
图8是本发明实施例8提供的静态解析行为树的装置的结构框图。
图9是本发明实施例9提供的行为树执行装置的结构框图。
图10是本发明实施例10提供的行为树运行优化装置的结构框图。
图11是本发明实施例11提供的在游戏运行中执行行为树的装置的结构框图。
图12是本发明实施例12提供的在游戏运行中执行行为树的优化装置的结构框图。
图13是本发明实施例13提供的一种静态解析行为树的方法的流程图。
图14是本发明实施例14提供的一种行为树执行方法的流程图。
图15是本发明实施例15提供的一种静态解析行为树的装置的结构框图。
图16是本发明实施例16提供的一种行为树执行装置的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,是本发明实施例1提供的静态解析行为树的方法的流程图。
所述静态解析行为树的方法,包括步骤S11~S14:
S11、依次读取原始行为树文件中的每一个节点的节点信息。
其中,原始行为树文件以protobuf格式存储,每个原始行为树对应一个文件,每个原始行为树节点对应文件中的一个protobuf节点。原始行为树中的每个节点保存了该节点的节点信息,所述节点信息包括节点类型、节点名称和节点参数;其中:
节点类型包括根节点、装饰节点、动作节点以及条件节点,每一节点的节点类型决定了该节点生成函数时的调用关系;
每一节点的节点名称决定了该节点生成函数时所用的生成规则;
每一节点的节点参数决定了该节点生成函数的具体内容。
具体的,对于动作节点“移动到X,Y”,其中,“动作节点”为该节点的节点类型,“移动”为该节点的节点名称,“X,Y”为该节点的节点参数,因此,在解析该节点时,会应用对应的生成规则“移动节点”来生成对应的函数(代码)。其中参数X,Y存储在protobuf格式的原始节点中,生成规则首先读取到X,Y的具体值,比如(X,Y)=(100,90),就会生成该节点对应的python代码:“player.moveTo(100,90)”。
对于动作节点“释放技能I”,则会应用对应的生成规则“释放技能”来生成对应的代码。其中参数I存储在protobuf格式的原始节点中,表示释放第几个技能。生成规则首先读取到I的具体值,比如I=2,就会生成该节点对应的python代码:“skill=player.getSkill(2);player.castSkill(skill)”。
对于条件节点“判断一定范围L内的敌方单位满足条件N”,则会应用对应的生成规则“判断范围内的敌人数量”来生成对应的代码,其中参数L和N存储在protobuf格式的原始节点中,生成规则首先读取到L和N的具体值,比如L=500,N=”<=3”,就会生成该节点对应的代码:
x,y=currentplayer.pos#获取当前战斗单位的位置
enemies=battlefield.findenemies(x,y,500)#获取以x,y为中心,500半径以内所有的敌方单位
returnlen(enemies)<=3。
S12、当读取到的节点为根节点时,根据所述根节点的节点信息为所述原始行为树文件对应生成一个空的脚本文件以及在所述脚本文件中生成对应的入口函数。
具体的,在读取原始行为树文件的过程中,如果读取到的节点类型是“根节点”,那么,先生成一个空的脚本文件。其中,脚本文件为python脚本文件,文件名以行为树的根节点编号命名,例如,若原始行为树根节点编号为10400004,那么生成的脚本文件命名为bt10400004.py。
然后,在生成的空的脚本文件中,对应生成该根节点的节点函数,也称为入口函数,该入口函数名固定为entry,函数内容是调用它的子节点。
S13、当读取到的节点为子节点时,根据所述子节点的节点信息在所述脚本文件中生成对应的节点函数。
可以理解的,在一个原始行为文件中,除了根节点外,其他节点均为子节点。另外,可以根据获取到的节点信息中的节点类型判断根节点还是子节点。
具体的,在读取行为树文件的过程中,如果读取到的节点类型是“装饰节点”、“动作节点”或者“条件节点”,就根据不同的子节点类型调用不同的调用关系。生成的子节点函数以该子节点编号命名,如子节点编号为10100608,则子节点函数名命名为f10100608。
其中,对于装饰节点,需要生成它的所有子节点函数的调用逻辑。装饰节点包括“顺序执行直到成功”、“顺序执行直到失败”、“报告成功”、“报告失败”等。以“顺序执行直到成功”为例,该节点生成的代码依次调用它的所有子节点函数,并判断返回值,当某一个子节点的返回值是True(正确)的时候,停止执行后面的节点,并返回True(正确);如果该节点的所有子节点都返回False(错误),则该节点也返回False(错误)。
对于动作节点和条件节点,主要作用是执行和应用(例如,游戏)逻辑相关的动作和判断,取决于具体的内容。
S14、当在所述脚本文件中生成全部节点所对应的节点函数时,得到用于解析所述原始行为树文件的完整脚本文件。
具体的,当依次读取到原始行为树文件中的最后一个子节点,并且生成对应的子节点函数写入该脚本文件后,此时,则完成对整个原始行为树文件中的最的静态解析,得到用于解析所述原始行为树文件的完整脚本文件。
可以理解的,对于每一个原始行为树文件,均可通过执行步骤S11~S14以生成对应的用于解析每一原始行为树文件的完整脚本文件。
另外,通过静态解析得到每一个原始行为树文件的完整脚本文件,需要进行保存。
可见,本实施例提供的一种静态解析行为树的方法,通过将原本需要在游戏运行中动态解析的行为树节点进行提前解析成脚本文件,并翻译为静态的函数,且所有节点参数都被翻译为常量。这样,在游戏运行过程中,只需要直接执行解析后的脚本文件中的函数即可,不需要解析任何参数,可以大幅度减少行为树的执行时间,提高行为树运行效率。另外,在每个节点对应解析成一个独立的函数,便于跟踪和定位运行时的错误;而且参数被提前解析,因此可以在生成静态函数的时候检查参数的合法性,并提前排除一些错误,从而提高行为树运行的准确性。
参见图2,是本发明实施例2提供的静态解析行为树的方法的流程图。
所述静态解析行为树的方法,包括步骤S21~S26:
S21、依次读取原始行为树文件中的每一个节点的节点信息;
S22、当读取到的节点为根节点时,根据所述根节点的节点信息为所述原始行为树文件对应生成一个空的脚本文件以及在所述脚本文件中生成对应的入口函数;
S23、当读取到的节点为子节点时,根据所述子节点的节点信息在所述脚本文件中生成对应的节点函数;
S24、当读取到的节点引用了其他行为树模块的功能或者使用了全局变量,则在所述脚本文件的文件头部增加相应的模块引用语句或变量声明;
S25、当读取到的节点需要跳转到另一行为树去执行,则在所述脚本文件的文件头部生成对另一行为树的引用语句,并在生成的节点函数中加入对另一行为树所对应的入口函数的调用
S26、当在所述脚本文件中生成全部节点所对应的节点函数时,得到用于解析所述原始行为树文件的完整脚本文件。
可见,本实施例在实施例1的基础上,增加了步骤S25和步骤S26,其中:
在步骤S25中,如果读取到的节点用到了其他python模块的功能,或者使用了全局变量,就需要在生成的脚本文件的文件头部增加相应的模块引用语句和变量声明。如果同一个原始行为树文件中存在多个节点引用相同的模块,则将生成的模块引用语句合并;如果同一个原始行为树文件中存在多个节点声明变量,则将节点编号作为变量名后缀,以避免出现同名变量。
在步骤S26,当读取到的节点需要跳转到另一行为树去执行,那么在所述脚本文件的文件头部生成对另一行为树的引用语句,并在生成的节点函数中加入对另一行为树所对应的入口函数的调用,例如,若需要跳转到的行为树编号为10400005,那么就生成对应的调用函数:bt10400005.entry()。
可以理解的,对于每一个原始行为树文件,均可通过执行步骤S21~S26以生成对应的用于解析每一原始行为树文件的完整脚本文件。
另外,通过静态解析得到每一个原始行为树文件的完整脚本文件,需要进行保存。
本实施例中的其他步骤与如图1所示实施例提供的静态解析行为树的方法的内容相同,因此,本实施例中不再对该部分内容进行赘述,具体可参见图1所示实施例中的相关描述。
参考图3,是本发明实施例3提供的行为树执行方法的流程图。该行为树执行方法包括步骤S31~S32:
S31、根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如图1或图2所示的静态解析行为树的方法所生成的用于解析原始行为树文件的完整脚本文件;
S32、顺序执行所述脚本文件中的每一个函数。
其中,所述预先设置的执行顺序具体为:通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。例如,在一个应用(游戏)运行过程中,可以预先设置执行行为树所对应的脚本文件的顺序,例如,设定执行完第一个行为树(对应为脚本文件1)后执行第三个行为树(对应为脚本文件3),然后再执行第四个行为树(对应为脚本文件4),则可以通过引入函数import引用对应的脚本文件。
一般的,在顺序执行行为树所对应的脚本文件时,首先从脚本文件的入口函数开始执行。脚本文件的入口函数对应于原始行为树的“根节点”,入口函数的名字固定为entry,函数内容是调用它的子节点。然后再依次执行其他子节点对应的子节点函数。
在执行行为树子节点对应的子函数的过程中,不再考虑节点类型是“装饰节点”、“动作节点”或者“条件节点”,而是直接执行生成的节点函数。
可见,本实施例提供的一种行为树执行方法的方法,在运行行为树时,通过读取行为树所对应的提前静态解析好的脚本文件,并直接执行解析后的脚本文件中的函数即可。由于提前解析的脚本文件翻译为静态的函数,且行为树中的所有节点参数都被翻译为常量。这样,在游戏运行过程中,只需要直接执行解析后的脚本文件中的函数即可,不需要解析任何参数,可以大幅度减少行为树的执行时间,提高行为树运行效率。
参考图4,是本发明实施例4提供的行为树运行优化方法的流程图。该行为树运行优化方法包括步骤S41~S42:
S41、利用如1图或图2所示的静态解析行为树的方法对原始行为树文件提前进行解析,生成对应的脚本文件;
S42、在行为树运行时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数。
其中,对原始行为树文件提前进行静态解析,以生成对应的脚本文件的过程请参考实施例1或实施例2,在此不再赘述。
具体的,所述预先设置的执行顺序具体为:通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。例如,在一个应用(游戏)运行过程中,可以预先设置执行行为树所对应的脚本文件的顺序,例如,设定执行完第一个行为树(对应为脚本文件1)后执行第三个行为树(对应为脚本文件3),然后再执行第四个行为树(对应为脚本文件4),则可以通过引入函数import引用对应的脚本文件。
一般的,在顺序执行行为树所对应的脚本文件时,首先从脚本文件的入口函数开始执行。脚本文件的入口函数对应于原始行为树的“根节点”,入口函数的名字固定为entry,函数内容是调用它的子节点。然后再依次执行其他子节点对应的子节点函数。
在执行行为树子节点对应的子函数的过程中,不再考虑节点类型是“装饰节点”、“动作节点”或者“条件节点”,而是直接执行生成的节点函数。
可见,本实施例提供的一种行为树运行优化方法,通过将原本需要在应用(例如,游戏)运行中动态解析的行为树节点进行提前解析成脚本文件,并翻译为静态的函数,且所有节点参数都被翻译为常量。然后,在应用(例如,游戏)运行过程中,通过直接执行解析后的脚本文件中的函数即可,不需要解析任何参数,可以大幅度减少行为树的执行时间,提高行为树运行效率。另外,在每个节点对应解析成一个独立的函数,便于跟踪和定位运行时的错误;而且参数被提前解析,因此可以在生成静态函数的时候检查参数的合法性,并提前排除一些错误,从而提高行为树运行的准确性。
参考图5,是本发明实施例5提供的在游戏运行中执行行为树的方法的流程图。
该方法包括步骤S51~S52:
S51、根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如图1或图2所示的静态解析行为树的方法所生成的用于解析原始行为树文件的完整脚本文件;
S52、顺序执行所述脚本文件中的每一个函数,并响应相应的游戏动作。
其中,所述预先设置的执行顺序具体为:通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。例如,在一个游戏运行过程中,可以预先设置执行行为树所对应的脚本文件的顺序,例如,设定执行完第一个行为树(对应为脚本文件1)后执行第三个行为树(对应为脚本文件3),然后再执行第四个行为树(对应为脚本文件4),则可以通过引入函数import引用对应的脚本文件。
一般的,在顺序执行行为树所对应的脚本文件时,首先从脚本文件的入口函数开始执行。脚本文件的入口函数对应于原始行为树的“根节点”,入口函数的名字固定为entry,函数内容是调用它的子节点。然后再依次执行其他子节点对应的子节点函数。
在执行行为树子节点对应的子函数的过程中,不再考虑节点类型是“装饰节点”、“动作节点”或者“条件节点”,而是直接执行生成的节点函数。另外,在执行每个子节点函数时,响应相应的游戏动作。
可见,本实施例提供的一种在游戏运行中执行行为树的方法,在游戏运行中运行行为树时,通过读取行为树所对应的提前静态解析好的脚本文件,并直接执行解析后的脚本文件中的函数即可。由于提前解析的脚本文件翻译为静态的函数,且行为树中的所有节点参数都被翻译为常量。这样,在游戏运行过程中,只需要直接执行解析后的脚本文件中的函数即可,不需要解析任何参数,可以大幅度减少行为树的执行时间,提高行为树运行效率。
参考图6,是本发明实施例6提供的在游戏运行中执行行为树的优化方法的流程图。
该方法包括步骤S61~S62:
S61、利用如图1或图2所示的静态解析行为树的方法对原始行为树文件提前进行解析,生成对应的脚本文件;
S62、在游戏运行中执行行为树时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数及响应相应的游戏动作。
其中,对原始行为树文件提前进行静态解析,以生成对应的脚本文件的过程请参考实施例1或实施例2,在此不再赘述。
具体的,所述预先设置的执行顺序具体为:通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。例如,在一个游戏运行过程中,可以预先设置执行行为树所对应的脚本文件的顺序,例如,设定执行完第一个行为树(对应为脚本文件1)后执行第三个行为树(对应为脚本文件3),然后再执行第四个行为树(对应为脚本文件4),则可以通过引入函数import引用对应的脚本文件。
一般的,在顺序执行行为树所对应的脚本文件时,首先从脚本文件的入口函数开始执行。脚本文件的入口函数对应于原始行为树的“根节点”,入口函数的名字固定为entry,函数内容是调用它的子节点。然后再依次执行其他子节点对应的子节点函数。
在执行行为树子节点对应的子函数的过程中,不再考虑节点类型是“装饰节点”、“动作节点”或者“条件节点”,而是直接执行生成的节点函数。另外,在执行每个子节点函数时,响应相应的游戏动作。
可见,本实施例提供的一种在游戏运行中执行行为树的优化方法,通过将原本需要在游戏运行中动态解析的行为树节点进行提前解析成脚本文件,并翻译为静态的函数,且所有节点参数都被翻译为常量。然后,在游戏运行过程中,通过直接执行解析后的脚本文件中的函数即可,不需要解析任何参数,可以大幅度减少行为树的执行时间,提高行为树运行效率。另外,在每个节点对应解析成一个独立的函数,便于跟踪和定位运行时的错误;而且参数被提前解析,因此可以在生成静态函数的时候检查参数的合法性,并提前排除一些错误,从而提高行为树运行的准确性。
图7是本发明实施例7提供的静态解析行为树的装置的结构框图。该装置包括:
原始行为树读取模块71,用于依次读取原始行为树文件中的每一个节点的节点信息;
脚本文件及入口函数生成模块72,用于当读取到的节点为根节点时,根据所述根节点的节点信息为所述原始行为树文件对应生成一个空的脚本文件以及在所述脚本文件中生成对应的入口函数;
子节点函数生成模块73,用于当读取到的节点为子节点时,根据所述子节点的节点信息在所述脚本文件中生成对应的节点函数;
当所述子节点函数生成模块73在所述脚本文件中生成全部节点所对应的节点函数时,则得到用于解析所述原始行为树文件的完整脚本文件。
另外,本实施例还包括存储模块,用于存储生成的每个原始行为树文件对应的完整脚本文件。
本实施例的静态解析行为树的装置的工作过程请对应参考实施例1,在此不再赘述。
参考图8,是本发明实施例8提供的静态解析行为树的装置的结构框图。该装置包括:
原始行为树读取模块81,用于依次读取原始行为树文件中的每一个节点的节点信息;
脚本文件及入口函数生成模块82,用于当读取到的节点为根节点时,根据所述根节点的节点信息为所述原始行为树文件对应生成一个空的脚本文件以及在所述脚本文件中生成对应的入口函数;
子节点函数生成模块83,用于当读取到的节点为子节点时,根据所述子节点的节点信息在所述脚本文件中生成对应的节点函数;
全局引用模块84,用于当原始行为树读取模块读取到的节点引用了其他行为树模块的功能或者使用了全局变量,则在所述脚本文件的文件头部增加相应的模块引用语句或变量声明;
外部行为树调用模块85,用于当读取到的节点需要跳转到另一行为树去执行,则在所述脚本文件的文件头部生成对另一行为树的引用语句,在生成的节点函数中加入对另一行为树所对应的入口函数的调用;
当所述子节点函数生成模块83在所述脚本文件中生成全部节点所对应的节点函数时,则得到用于解析所述原始行为树文件的完整脚本文件。
另外,本实施例还包括存储模块,用于存储生成的每个原始行为树文件对应的完整脚本文件。
本实施例的静态解析行为树的装置的工作过程请对应参考实施例2,在此不再赘述。
参考图9,是本发明实施例9提供的行为树执行装置的结构框图。该装置包括:
脚本文件读取模块91,用于根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如图7或图8所示的静态解析行为树的装置所生成的用于解析原始行为树文件的完整脚本文件;
脚本文件执行模块92,用于顺序执行所述脚本文件中的每一个函数。
本实施例的行为树执行装置的工作过程请对应参考实施例3,在此不再赘述。
参考图10,是本发明实施例10提供的行为树运行优化装置的结构框图。该包括装置:
如图7或8所述的静态解析行为树的装置101,用于对原始行为树文件提前进行解析,生成对应的脚本文件;
执行模块102,用于在行为树运行时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数。
本实施例的行为树运行优化装置的工作过程请对应参考实施例4,在此不再赘述。
参考图11,是本发明实施例11提供的在游戏运行中执行行为树的装置的结构框图。该装置包括:
脚本文件读取模块111,根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如图7或图8所示的静态解析行为树的装置所生成的用于解析原始行为树文件的完整脚本文件;
脚本文件执行模块112,用于顺序执行所述脚本文件中的每一个函数,并响应相应的游戏动作。
本实施例的在游戏运行中执行行为树的装置的工作过程请对应参考实施例5,在此不再赘述。
参考图12,是本发明实施例12提供的在游戏运行中执行行为树的优化装置的结构框图。该装置包括:
如图7或图8的静态解析行为树的装置121,用于对原始行为树文件提前进行解析,生成对应的脚本文件;
执行模块122,用于在游戏运行中执行行为树时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数及响应相应的游戏动作。
本实施例的行在游戏运行中执行行为树的优化装置的工作过程请对应参考实施例6,在此不再赘述。
参见图13,是本发明实施例13提供的静态解析行为树的方法的流程图。所述静态解析行为树的方法,包括步骤S131~S133:
S131、依次读取原始行为树文件中的至少部分连续节点的节点信息;
S132、根据读取到的所述至少部分连续节点中的第一个节点的节点信息生成空的脚本文件;
S133、依次将读取到的每一个节点的节点信息生成对应的节点函数并写入所述脚本文件中,从而得到用于解析所述原始行为树文件的至少部分连续节点的脚本文件。
其中,当所述至少部分连续节点包括根节点时,则根据所述根节点的节点信息对应生成所述空的脚本文件。
可以理解的,若所述至少部分连续节点不包括根节点,则根据所述至少部分连续节点的第一个节点的节点信息来生成所述空的脚本文件。
可以理解的,本实施例的实现方法与实施例1相似,不同的,本实施例时对整个原始行为树文件中的至少部分连续节点进行静态解析。当所述至少部分连续节点包括所述原始行为树文件中的全部节点时,本实施例与实施例1的方法一致,当所述至少部分连续节点不包括所述原始行为树文件中的全部节点时,本实施例仅仅对所述原始行为树文件中的部分连续节点进行静态解析,并生成对应的脚本文件。
本实施例的脚本生成的具体过程可参考实施例1。
参见图14,是本发明实施例14提供的行为树执行方法的流程图。其中,执行的行为树文件中的至少部分连续节点通过如图13所示的静态解析行为树的方法进行静态解析后得到相应的脚本文件,所述行为树执行方法包括步骤S141~S142:
S141、当读取到行为树文件中的所述至少部分连续节点时,获取相应的脚本文件并顺序执行所述脚本文件中的每一个函数;
S142、当读取到行为树文件中的其他节点时,动态解析每一其他节点的节点信息后再执行。
参见图15,是本发明实施例15提供的静态解析行为树的装置的结构框图。该装置包括:
原始行为树读取模块151,用于依次读取原始行为树文件中的至少部分连续节点的节点信息;
脚本文件生成模块152,用于根据读取到的所述至少部分连续节点中的第一个节点的节点信息生成空的脚本文件;
节点函数生成模块153,用于依次将读取到的每一个节点的节点信息生成对应的节点函数并写入所述脚本文件中,从而得到用于解析所述原始行为树文件的至少部分连续节点的脚本文件。
参见图16,是本发明实施例16提供的行为树执行装置的结构框图。其中,执行的行为树文件中的至少部分连续节点通过如图15所示的静态解析行为树的装置进行静态解析后得到相应的脚本文件,所述行为树执行装置包括:
脚本文件读取及执行模块161,用于当读取到行为树文件中的所述至少部分连续节点时,获取相应的脚本文件并顺序执行所述脚本文件中的每一个函数;
动态解析及执行模块162,用于当读取到行为树文件中的其他节点时,动态解析每一其他节点的节点信息后再执行。
综上所述,本发明实施例公开的静态解析行为树的方法和装置、行为树执行方法和装置、行为树运行优化方法和装置、在游戏运行中执行行为树的方法和装置、以及在游戏运行中执行行为树的优化方法和装置,通过将现有技术中需要在游戏运行中动态解析的行为树节点进行提前解析,并翻译为静态的函数,且所有节点参数都被翻译为常量,因此在应用(游戏)运行过程中只需要直接执行解析后的函数即可,不需要解析任何参数,可以大幅度减少行为树的执行时间,提高行为树运行效率,并降低行为树执行消耗。另外,每个节点对应一个独立的函数,便于跟踪和定位运行时的错误;而且参数被提前解析,因此可以在生成静态函数的时候检查参数的合法性,并提前排除一些错误,从而提高行为树运行的准确性。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (36)
1.一种静态解析行为树的方法,其特征在于,包括:
依次读取原始行为树文件中的至少部分连续节点的节点信息;
根据读取到的所述至少部分连续节点中的第一个节点的节点信息生成空的脚本文件;
依次将读取到的每一个节点的节点信息生成对应的节点函数并写入所述脚本文件中,从而得到用于解析所述原始行为树文件的至少部分连续节点的脚本文件。
2.如权利要求1所述的静态解析行为树的方法,其特征在于,所述至少部分连续节点包括根节点;
所述根据读取到的所述至少部分连续节点中的第一个节点的节点信息生成空的脚本文件具体为:
根据所述根节点的节点信息对应生成所述空的脚本文件。
3.如权利要求2所述的静态解析行为树的方法,其特征在于,所述至少部分连续节点包括所述原始行为树文件中的全部节点;
所述依次将读取到的每一个节点的节点信息生成对应的节点函数并写入空的脚本文件中,从而得到用于解析所述原始行为树文件的至少部分连续节点的脚本文件具体包括步骤:当读取到的节点为根节点时,根据所述根节点的节点信息在所述脚本文件中生成对应的入口函数;
当读取到的节点为子节点时,根据所述子节点的节点信息在所述脚本文件中生成对应的节点函数;
当在所述脚本文件中生成全部节点所对应的节点函数时,得到用于解析所述原始行为树文件的完整脚本文件。
4.如权利要求1~3任一项所述的静态解析行为树的方法,其特征在于,所述节点信息包括节点类型、节点名称和节点参数;其中,
节点类型包括根节点、装饰节点、动作节点以及条件节点,每一节点的节点类型决定了该节点生成函数时的调用关系;
每一节点的节点名称决定了该节点生成函数时所用的生成规则;
每一节点的节点参数决定了该节点生成函数的具体内容。
5.如权利要求3所述的静态解析行为树的方法,其特征在于,所述脚本文件的文件名以原始行为树文件中的根节点的编号命名。
6.如权利要求1~3任一项所述的静态解析行为树的方法,其特征在于,所述方法还包括:
当读取到的节点引用了其他行为树模块的功能或者使用了全局变量,则在所述脚本文件的文件头部增加相应的模块引用语句或变量声明。
7.如权利要求6所述的静态解析行为树的方法,其特征在于:
如果同一个原始行为树文件中存在多个节点引用相同的模块,则将生成的模块引用语句合并;如果同一个原始行为树文件中存在多个节点声明变量,则将节点编号作为变量名后缀。
8.如权利要求3所述的静态解析行为树的方法,其特征在于,还包括:
当读取到的节点需要跳转到另一行为树去执行,则在所述脚本文件的文件头部生成对另一行为树的引用语句,并在生成的节点函数中加入对另一行为树所对应的入口函数的调用。
9.如权利要求3所述的静态解析行为树的方法,其特征在于,还包括:
将所述完整脚本文件存储。
10.一种行为树执行方法,其特征在于,执行的行为树文件中的至少部分连续节点通过如权利要求1~9任一项所述的静态解析行为树的方法进行静态解析后得到相应的脚本文件,所述行为树执行方法包括步骤:
当读取到行为树文件中的所述至少部分连续节点时,获取相应的脚本文件并顺序执行所述脚本文件中的每一个函数;
当读取到行为树文件中的其他节点时,动态解析每一其他节点的节点信息后再执行。
11.一种行为树执行方法,其特征在于,包括:
根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如权利要求3~9中任一项所述的静态解析行为树的方法所生成的用于解析原始行为树文件的完整脚本文件;
顺序执行所述脚本文件中的每一个函数。
12.如权利要求11所述的行为树执行方法,其特征在于,所述预先设置的执行顺序具体为:
通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。
13.一种行为树运行优化方法,其特征在于,包括:
利用如权利要求3~9中任一项所述的静态解析行为树的方法对原始行为树文件提前进行解析,生成对应的脚本文件;
在行为树运行时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数。
14.如权利要求13所述的行为树运行优化方法,其特征在于,所述预先设置的执行顺序具体为:
通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。
15.一种在游戏运行中执行行为树的方法,其特征在于,包括:
根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如权利要求3~9中任一项所述的静态解析行为树的方法所生成的用于解析原始行为树文件的完整脚本文件;
顺序执行所述脚本文件中的每一个函数,并响应相应的游戏动作。
16.如权利要求15所述的在游戏运行中执行行为树的方法,其特征在于,所述预先设置的执行顺序具体为:
通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。
17.一种在游戏运行中执行行为树的优化方法,其特征在于,包括:
利用如权利要求3~9中任一项所述的静态解析行为树的方法对原始行为树文件提前进行解析,生成对应的脚本文件;
在游戏运行中执行行为树时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数及响应相应的游戏动作。
18.如权利要求17所述的游戏运行中执行行为树的优化方法,其特征在于,所述预先设置的执行顺序具体为:
通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。
19.一种静态解析行为树的装置,其特征在于,包括:
原始行为树读取模块,用于依次读取原始行为树文件中的至少部分连续节点的节点信息;
脚本文件生成模块,用于根据读取到的所述至少部分连续节点中的第一个节点的节点信息生成空的脚本文件;
节点函数生成模块,用于依次将读取到的每一个节点的节点信息生成对应的节点函数并写入空的脚本文件中,从而得到用于解析所述原始行为树文件的至少部分连续节点的脚本文件。
20.如权利要求19所述的静态解析行为树的装置,其特征在于,所述至少部分连续节点包括根节点;所述脚本文件生成模块进一步用于:根据所述根节点的节点信息对应生成所述空的脚本文件。
21.如权利要求20所述的静态解析行为树的装置,其特征在于,所述至少部分连续节点包括所述原始行为树文件中的全部节点;所述节点函数生成模块具体包括:
入口函数生成单元,用于当读取到的节点为根节点时,根据所述根节点的节点信息在所述脚本文件中生成对应的入口函数;
子节点函数生成单元,用于当读取到的节点为子节点时,根据所述子节点的节点信息在所述脚本文件中生成对应的节点函数;
当在所述脚本文件中生成全部节点所对应的节点函数时,得到用于解析所述原始行为树文件的完整脚本文件。
22.如权利要求19~21任一项所述的静态解析行为树的装置,其特征在于,所述节点信息包括节点类型、节点名称和节点参数;其中,
节点类型包括根节点、装饰节点、动作节点以及条件节点,每一节点的节点类型决定了该节点生成函数时的调用关系;
每一节点的节点名称决定了该节点生成函数时所用的生成规则;
每一节点的节点参数决定了该节点生成函数的具体内容。
23.如权利要求21所述的静态解析行为树的装置,其特征在于,所述脚本文件的文件名以原始行为树文件中的根节点的编号命名。
24.如权利要求19~21任一项所述的静态解析行为树的装置,其特征在于,所述装置还包括:
全局引用模块,用于当原始行为树读取模块读取到的节点引用了其他行为树模块的功能或者使用了全局变量,则在所述脚本文件的文件头部增加相应的模块引用语句或变量声明。
25.如权利要求24所述的静态解析行为树的装置,其特征在于,所述全局引用模块进一步用于:
如果同一个原始行为树文件中存在多个节点引用相同的模块,则将生成的模块引用语句合并;如果同一个原始行为树文件中存在多个节点声明变量,则将节点编号作为变量名后缀。
26.如权利要求21所述的静态解析行为树的装置,其特征在于,所述装置还包括:
外部行为树调用模块,用于当读取到的节点需要跳转到另一行为树去执行,则在所述脚本文件的文件头部生成对另一行为树的引用语句,在生成的节点函数中加入对另一行为树所对应的入口函数的调用。
27.如权利要求2所述的静态解析行为树的装置,其特征在于,还包括:
存储模块,用于将所述完整脚本文件存储。
28.一种行为树执行装置,其特征在于,执行的行为树文件中的至少部分连续节点通过如权利要求19~27任一项所述的静态解析行为树的装置进行静态解析后得到相应的脚本文件,所述行为树执行装置包括:
脚本文件读取及执行模块,用于当读取到行为树文件中的所述至少部分连续节点时,获取相应的脚本文件并顺序执行所述脚本文件中的每一个函数;
动态解析及执行模块,用于当读取到行为树文件中的其他节点时,动态解析每一其他节点的节点信息后再执行。
29.一种行为树执行装置,其特征在于,包括:
脚本文件读取模块,用于根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如权利要求21~27中任一项所述的静态解析行为树的装置所生成的用于解析原始行为树文件的完整脚本文件;
脚本文件执行模块,用于顺序执行所述脚本文件中的每一个函数。
30.如权利要求29所述的行为树执行装置,其特征在于,所述预先设置的执行顺序是指:
通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。
31.一种行为树运行优化装置,其特征在于,包括:
如权利要求21~27中任一项所述的静态解析行为树的装置,用于对原始行为树文件提前进行解析,生成对应的脚本文件;
执行模块,用于在行为树运行时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数。
32.如权利要求31所述的行为树运行优化装置,其特征在于,所述预先设置的执行顺序是指:
通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。
33.一种在游戏运行中执行行为树的装置,其特征在于,包括:
脚本文件读取模块,根据预先设置的执行顺序,读取相应的脚本文件;其中,所述脚本文件为利用如权利要求21~27中任一项所述的静态解析行为树的装置所生成的用于解析原始行为树文件的完整脚本文件;
脚本文件执行模块,用于顺序执行所述脚本文件中的每一个函数,并响应相应的游戏动作。
34.如权利要求33所述的在游戏运行中执行行为树的装置,其特征在于,所述预先设置的执行顺序是指:
通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。
35.一种在游戏运行中执行行为树的优化装置,其特征在于,包括:
如权利要求21~27中任一项所述的静态解析行为树的装置,用于对原始行为树文件提前进行解析,生成对应的脚本文件;
执行模块,用于在游戏运行中执行行为树时,根据预先设置的执行顺序,调用相应的脚本文件,并顺序执行所述脚本文件中的每一个函数及响应相应的游戏动作。
36.如权利要求35所述的行为树运行优化装置,其特征在于,所述预先设置的执行顺序是指:
通过引入函数import引入执行完每个脚本文件后的下一个脚本文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511005196.4A CN105653271B (zh) | 2015-12-28 | 2015-12-28 | 行为树的静态解析、执行以及优化方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511005196.4A CN105653271B (zh) | 2015-12-28 | 2015-12-28 | 行为树的静态解析、执行以及优化方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105653271A true CN105653271A (zh) | 2016-06-08 |
CN105653271B CN105653271B (zh) | 2018-12-21 |
Family
ID=56478215
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511005196.4A Active CN105653271B (zh) | 2015-12-28 | 2015-12-28 | 行为树的静态解析、执行以及优化方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105653271B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106021816A (zh) * | 2016-06-20 | 2016-10-12 | 华北电力大学(保定) | 一种基于行为树的分布式系统行为仿真分析工具的实现方法 |
CN106096159A (zh) * | 2016-06-20 | 2016-11-09 | 华北电力大学(保定) | 一种云平台下的分布式系统行为仿真分析系统的实现方法 |
CN109189504A (zh) * | 2018-09-20 | 2019-01-11 | 腾讯科技(深圳)有限公司 | 行为执行方法、行为树生成方法、装置和计算机设备 |
CN109683876A (zh) * | 2018-12-10 | 2019-04-26 | 上海精密计量测试研究所 | 一种基于Unity3D的行为树设计方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103761108A (zh) * | 2014-02-14 | 2014-04-30 | 杭州朗和科技有限公司 | 一种实现行为树的方法及装置 |
US8758125B2 (en) * | 2009-07-24 | 2014-06-24 | Wms Gaming, Inc. | Controlling event-driven behavior of wagering game objects |
CN105068929A (zh) * | 2015-08-06 | 2015-11-18 | 网易(杭州)网络有限公司 | 测试脚本生成方法和装置、测试方法、测试装置以及测试系统 |
CN105117575A (zh) * | 2015-06-17 | 2015-12-02 | 深圳市腾讯计算机系统有限公司 | 一种行为处理方法及装置 |
-
2015
- 2015-12-28 CN CN201511005196.4A patent/CN105653271B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8758125B2 (en) * | 2009-07-24 | 2014-06-24 | Wms Gaming, Inc. | Controlling event-driven behavior of wagering game objects |
CN103761108A (zh) * | 2014-02-14 | 2014-04-30 | 杭州朗和科技有限公司 | 一种实现行为树的方法及装置 |
CN105117575A (zh) * | 2015-06-17 | 2015-12-02 | 深圳市腾讯计算机系统有限公司 | 一种行为处理方法及装置 |
CN105068929A (zh) * | 2015-08-06 | 2015-11-18 | 网易(杭州)网络有限公司 | 测试脚本生成方法和装置、测试方法、测试装置以及测试系统 |
Non-Patent Citations (2)
Title |
---|
JEASON19: "《https://www.cnblogs.com/jeason1997/p/4803243.html》", 12 September 2015 * |
NISANSALA YATAPANAGE ET AL: "Slicing Behavior Tree Models for Verification", 《IFI INTERNATIONAL FEDERATION FOR INFORMATION PROCESSING 2010》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106021816A (zh) * | 2016-06-20 | 2016-10-12 | 华北电力大学(保定) | 一种基于行为树的分布式系统行为仿真分析工具的实现方法 |
CN106096159A (zh) * | 2016-06-20 | 2016-11-09 | 华北电力大学(保定) | 一种云平台下的分布式系统行为仿真分析系统的实现方法 |
CN106021816B (zh) * | 2016-06-20 | 2019-01-22 | 华北电力大学(保定) | 一种基于行为树的分布式系统行为仿真分析工具的实现方法 |
CN109189504A (zh) * | 2018-09-20 | 2019-01-11 | 腾讯科技(深圳)有限公司 | 行为执行方法、行为树生成方法、装置和计算机设备 |
CN109189504B (zh) * | 2018-09-20 | 2020-04-28 | 腾讯科技(深圳)有限公司 | 行为执行方法、行为树生成方法、装置和计算机设备 |
CN109683876A (zh) * | 2018-12-10 | 2019-04-26 | 上海精密计量测试研究所 | 一种基于Unity3D的行为树设计方法 |
CN109683876B (zh) * | 2018-12-10 | 2022-06-24 | 上海精密计量测试研究所 | 一种基于Unity3D的行为树设计方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105653271B (zh) | 2018-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105653271B (zh) | 行为树的静态解析、执行以及优化方法和装置 | |
CN110603527B (zh) | 用于服务器侧生产代码的条件调试的方法、系统和设备 | |
US20130179863A1 (en) | Bug variant detection using program analysis and pattern identification | |
CN106547520B (zh) | 一种代码路径分析方法及装置 | |
CN109783161B (zh) | iOS系统中应用程序的运行信息确定方法、装置 | |
CN107015841B (zh) | 一种程序编译的预处理方法及程序编译设备 | |
US20040054991A1 (en) | Debugging tool and method for tracking code execution paths | |
Derezinska et al. | Experimental evaluation of mutation testing approaches to python programs | |
US20140033178A1 (en) | Method and apparatus for reverse debugging source code using causal analysis | |
KR20080023728A (ko) | 에뮬레이터 성능을 개선하기 위한 가상 코드의 선택적전처리 컴파일 | |
US8230402B2 (en) | Testing and debugging of dynamic binary translation | |
US10496423B2 (en) | Method for opening up data and functions of terminal application based on reconstruction technology | |
CN113366474A (zh) | 用于通过将计算机程序的控制流表示为数据来混淆计算机程序的系统、方法和存储介质 | |
US8286141B2 (en) | Instruction-trace generation program, instruction-trace generating device, and instruction-trace generating method | |
US9442826B2 (en) | Kernel functionality checker | |
US20210232378A1 (en) | Program calling, electronic device, and storage medium | |
CN114115884B (zh) | 一种编程服务的管理方法以及相关装置 | |
CN111338609A (zh) | 信息获取方法、装置、存储介质及终端 | |
CN111026371A (zh) | 一种游戏开发方法、装置、电子设备及存储介质 | |
CN116107625A (zh) | 流程设计方法、装置、设备、存储介质及程序产品 | |
CN112740187A (zh) | 调试程序的方法和系统 | |
US20190018663A1 (en) | Code lineage tool | |
CN114637988A (zh) | 一种面向二进制的函数级软件随机化方法 | |
CN110008073B (zh) | 硬件平台差异化屏蔽方法、装置、设备及可读存储介质 | |
US9483241B2 (en) | Method ranking based on code invocation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |