掌桥专利:专业的专利平台
掌桥专利
首页

游戏脚本处理方法、装置、计算机设备和存储介质

文献发布时间:2023-06-19 13:46:35


游戏脚本处理方法、装置、计算机设备和存储介质

技术领域

本申请涉及计算机技术领域,特别是涉及一种游戏脚本处理方法、装置、计算机设备和存储介质。

背景技术

随着游戏开发技术的发展,游戏脚本是一种特定的描述性语言,依据一定的格式编写的可执行文件,用来控制游戏应用程序。然而,随着游戏剧情复杂的增加,游戏脚本的代码量也随之增大,目前的游戏脚本中的代码结构错综复杂,数据嵌套很深,当游戏引擎需要读取游戏脚本进行游戏画面渲染时,需要花费很长的时间对该游戏脚本进行解析,导致游戏脚本执行效率低。

发明内容

基于此,有必要针对上述技术问题,提供一种游戏脚本处理方法、装置、计算机设备和存储介质,通过领域特定语言描述游戏脚本中的游戏脚本语句,通过领域特定语言对游戏脚本语句进行精简,不仅能够规避很多边角问题,而且精简后的游戏脚本语句在执行过程也不需要花费太多的时间解析,提高游戏脚本的执行效率。

一种游戏脚本处理方法,该方法包括:

获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的;

对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式;

通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。

在其中一个实施例中,获取待处理游戏脚本内容,包括:获取编辑器编辑好的游戏脚本内容,将游戏脚本内容上传至内容分发网络中,发送获取请求,根据获取请求从内容分发网络中拉取待处理游戏脚本内容。

在其中一个实施例中,对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,包括:调用目标操作系统文件,目标操作系统文件是根据目标操作系统的预设语法规则编写得到的,根据目标操作系统文件从各待执行游戏脚本语句中得到筛选后的多个待执行游戏脚本语句,将筛选后的多个待执行游戏脚本语句转换为对应的标记序列,调用匹配的回调函数,通过回调函数将各标记序列进行转换得到抽象语法树集。

在其中一个实施例中,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染,包括:通过渲染引擎读取当前抽象语法树,当前抽象语法树是抽象语法树集中的任意一个,在当前抽象语法树对应的目标游戏脚本语句为游戏脚本指令语句时,根据当前抽象语法树的抽象语法树描述信息确定与当前抽象语法树匹配的当前渲染组件,通过当前渲染组件对当前抽象语法树进行渲染。

在其中一个实施例中,还包括:在当前抽象语法树对应的目标游戏脚本语句为游戏脚本逻辑语句,且目标游戏脚本语句为游戏脚本判断语句时,根据当前抽象语法树的描述信息判断是否满足预设判断条件,,其中游戏脚本逻辑语句包括游戏脚本判断语句、游戏脚本循环语句,如果满足,获取当前抽象语法树对应的当前游戏脚本语句,当前游戏脚本语句是当前抽象语法树对应的多个目标游戏脚本语句中的任意一个,判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用与当前游戏脚本语句匹配的当前渲染组件进行渲染。

在其中一个实施例中,判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用匹配的当前渲染组件进行渲染,包括:在当前游戏脚本语句为游戏脚本指令语句时,根据当前游戏脚本语句的脚本语句描述信息确定匹配的当前渲染组件,通过当前渲染组件对当前游戏脚本语句进行渲染。

在其中一个实施例中,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染,包括:通过渲染引擎逐个读取抽象语法树集中各抽象语法树,从洋葱模型注册的渲染组件中确定与读取的抽象语法树匹配的目标渲染组件,通过目标渲染组件对渲染上下文进行判断决定自身是否需要渲染,如果需要渲染,则通过目标渲染组件对读取的抽象语法树进行渲染。

一种游戏脚本处理装置,该装置包括:

获取模块,用于获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的;

解析模块,用于对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式;

渲染模块,用于通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的;

对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式;

通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的;

对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式;

通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。

上述游戏脚本处理方法、装置、计算机设备和存储介质,获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的,对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。因此,可以通过领域特定语言描述游戏脚本中的游戏脚本语句,使用领域特定语言对游戏脚本语句进行精简,不仅能够规避很多边角问题,而且精简后的游戏脚本语句在执行过程也不需要花费太多的时间解析,从而提高游戏脚本的执行效率。

附图说明

图1为一个实施例中游戏脚本处理方法的应用环境图;

图2为一个实施例中游戏脚本处理方法的流程示意图;

图3为一个实施例中待处理游戏脚本内容获取步骤的流程示意图;

图4为一个实施例中待处理游戏脚本内容解析步骤的流程示意图;

图5为一个实施例中渲染引擎读取步骤的流程示意图;

图5A为一个实施例中游戏脚本内容的结构示意图;

图6为一个实施例中渲染引擎读取步骤的流程示意图;

图7为一个实施例中渲染引擎读取步骤的流程示意图;

图8为一个实施例中游戏脚本处理装置的结构框图;

图9为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的游戏脚本处理方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

具体地,服务器104获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的,对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染,将渲染后的游戏画面发送至终端102进行显示。

在一个实施例中,如图2所示,提供了一种游戏脚本处理方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:

步骤202,获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的。

其中,游戏脚本内容是用来控制游戏应用程序的,游戏脚本内容由至少一个游戏脚本语句组成的,而这里的待处理游戏脚本内容是正在等待处理的游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,这里的待执行游戏脚本语句是使用领域特定语言描述的,领域特定语言是一种自定义的语言,也可以称为DSL(Domain SpecialLanguage,领域特定语言)。而待执行游戏脚本语句可以根据实际业务情况、实际产品情况或者实际应用场景使用领域特定语言进行制定得到。例如,用领域特定语言描述的待执行游戏脚本语句可以是:player name=“xxx”file=“xxx”、sound name=“xxx”file=“xxx”等。

步骤204,对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式。

其中,在得到待处理游戏脚本内容后,可以对待处理游戏脚本内容进行解析,待处理游戏脚本内容的解析具体可以是对各待执行游戏脚本语句进行语法结构抽象分析,然后再根据分析后的抽象语法结构进行转换,得到各抽象语法树,由各抽象语法树组成的抽象语法树集。其中,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式。其中,抽象语法树又可以称为AST(abstract syntax code,抽象语法树),即,抽象语法树关联有待执行游戏脚本语句。

其中,对各待执行游戏脚本语句进行语法结构抽象分析,再根据分析后的抽象语法结构进行转换,得到各抽象语法树具体可以是,将待处理游戏脚本内容中的各待执行游戏脚本语句解析成token(标记序列),然后再将token转换成对应的AST。

步骤206,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。

其中,渲染引擎是一种用于渲染的引擎,渲染引擎中可以预先注册多个渲染组件,通过不同的渲染组件对不同的渲染内容进行渲染。具体地,在得到抽象语法树集后,渲染引擎可以逐个读取抽象语法树集中的各个抽象语法树,由于抽象语法树中包含各种描述信息,包括渲染组件名称、渲染内容等,可以通过读取的抽象语法树调用匹配的渲染组件,通过该渲染组件对读取的抽象语法树进行渲染。

例如,读取的抽象语法树是关于背景渲染组件的,渲染内容是关于渲染背景相关的内容,因此,调用背景渲染组件,通过背景渲染组件对读取的抽象语法树进行背景内容渲染。

上述游戏脚本处理方法中,获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的,对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。因此,可以通过领域特定语言描述游戏脚本中的游戏脚本语句,使用领域特定语言对游戏脚本语句进行精简,不仅能够规避很多边角问题,而且精简后的游戏脚本语句在执行过程也不需要花费太多的时间解析,从而提高游戏脚本的执行效率。

在一个实施例中,如图3所示,获取待处理游戏脚本内容,包括:

步骤302,获取编辑器编辑好的游戏脚本内容,将游戏脚本内容上传至内容分发网络中。

步骤304,发送获取请求,根据获取请求从内容分发网络中拉取待处理游戏脚本内容。

其中,这里的编辑器是用来编辑游戏脚本内容的工具,可以通过编辑器进行游戏脚本内容的编辑,具体可以是根据实际业务情况、实际产品情况或实际应用场景进行游戏脚本语句的具体制定,得到游戏脚本内容,将编辑器编辑好的游戏脚本内容上传至内容分发网络cdn(Content Delivery Network)中。其中,内容分发网络cdn是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。其中,cdn的关键技术主要有内容存储和分发技术。

因此,发送获取请求,所谓获取请求是用来请求获取待处理游戏脚本内容的,获取请求中可以携带获取方所在的地址,根据获取方所在的地址就近从内容分发网络中拉取待处理游戏脚本内容。

在一个实施例中,如图4所示,对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,包括:

步骤402,调用目标操作系统文件,目标操作系统文件是根据目标操作系统的预设语法规则编写得到的。

步骤404,根据目标操作系统文件从各待执行游戏脚本语句中得到筛选后的多个待执行游戏脚本语句。

步骤406,将筛选后的多个待执行游戏脚本语句转换为对应的标记序列,调用匹配的回调函数,通过回调函数将各标记序列进行转换得到抽象语法树集。

其中,这里的目标操作系统是指ohm系统,ohm系统是一个帮助开发者定义自己的领域特定语言DSL的一个库,在设计好自己的DSL之后,omh系统会根据预设的语法规则编写自己的ohm文件。其中的ohm文件就是目标操作系统文件。

具体地,调用目标操作系统文件,即调用ohm文件,根据目标操作系统文件对待处理游戏脚本内容中的各待执行游戏脚本语句进行筛选,对于符合规则的待执行游戏脚本语句,进行转换,得到对应的标记序列。再通过调用与该标记序列匹配的回调函数,通过回调函数将各标记序列转换得到对应抽象语法树,组成抽象语法树集。

例如,在进行待处理游戏脚本内容的解析时,调用ohm文件,对于符合规则的待执行游戏脚本语句,进行token解析,然后再调用对应的DSL回函函数,在回调函数中将token转换成AST。

在一个实施例中,如图5所示,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染,包括:

步骤502,通过渲染引擎读取当前抽象语法树,当前抽象语法树是抽象语法树集中的任意一个。

步骤504,在当前抽象语法树对应的目标游戏脚本语句为游戏脚本指令语句时,根据当前抽象语法树的抽象语法树描述信息确定与当前抽象语法树匹配的当前渲染组件,通过当前渲染组件对当前抽象语法树进行渲染。

其中,渲染引擎是逐个读取抽象语法树集中的各抽象语法树,可以从抽象语法树集中确定一个抽象语法树为当前抽象语法树。由于抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式,而待执行游戏脚本语句是使用领域特定语言DSL描述的。而DSL可以包括但不限于游戏脚本指令语句、游戏脚本逻辑语句,具体可以如图5A所示,图5A示出一个实施例中游戏脚本内容的结构示意图,图5A中的游戏脚本内容可以包括多个游戏脚本语句,游戏脚本语句可以为游戏脚本指令语句、也可以为游戏脚本逻辑语句,游戏脚本指令语句的DSL例如player name=“xxx”file=“xxx”、sound name=“xxx”file=“xxx”等,游戏脚本逻辑语句的DSL例如:

#if XXX//do something

#else//do something

#end。

具体地,在进行当前抽象语法树的解析时,可以通过当前抽象语法树对应的目标游戏脚本语句的脚本语句类型来判断是否需要调用匹配的当前渲染组件,其中,目标游戏脚本语句可以为一个或多个,如果当前抽象语法树对应的目标游戏脚本语句为游戏脚本指令语句时,则根据当前抽象语法树的抽象语法树描述信息确定匹配的当前渲染组件。其中,当前抽象语法树的抽象语法树描述信息包括当前渲染组件标识、当前渲染内容等。因此,在确定当前渲染组件后,通过当前渲染组件对当前抽象语法树进行当前渲染内容的渲染。

在一个实施例中,如图6所示,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染,还包括:

步骤602,在当前抽象语法树对应的目标游戏脚本语句为游戏脚本逻辑语句,且目标游戏脚本语句为游戏脚本判断语句时,根据当前抽象语法树的描述信息判断是否满足预设判断条件,其中游戏脚本逻辑语句包括游戏脚本判断语句、游戏脚本循环语句。

步骤604,如果满足,获取当前抽象语法树对应的当前游戏脚本语句,当前游戏脚本语句是当前抽象语法树对应的多个目标游戏脚本语句中的任意一个。

步骤606,判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用与当前游戏脚本语句匹配的当前渲染组件进行渲染。

具体地,在进行当前抽象语法树的解析时,如果当前抽象语法树对应的目标游戏脚本语句为游戏脚本逻辑语句时,由于游戏脚本逻辑语句包括但不限于游戏脚本判断语句、游戏脚本循环语句,其中,游戏脚本判断语句是用来进行判断的游戏脚本语句,游戏脚本循环语句是用来进行循环操作的游戏脚本语句,检测目标游戏脚本语句是否为游戏脚本判断语句,在目标游戏脚本语句为游戏脚本判断语句时,根据当前抽象语法树的描述信息是否满足预设判断条件。

如果满足条件,获取当前抽象语法树对应的当前游戏脚本语句,当前游戏脚本语句是当前抽象语法树对应的多个目标游戏脚本语句中的任意一个。进一步地,再判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用与当前游戏脚本语句匹配的当前渲染组件进行渲染,因为只有当前游戏脚本语句为游戏脚本指令语句时,才需要调用匹配的当前渲染组件进行渲染。

其中,如果当前抽象语法树的类型为逻辑脚本时,需要判断当前抽象语法树是逻辑脚本中的判断分支还是循环分支,如果是判断分支,则根据当前抽象语法树的描述信息判断是否满足预设条件。如果是循环分支,则根据当前抽象语法树的描述信息进行循环处理。其中,预设条件可以根据实际业务需求、实际产品需求或实际应用场景进行确定得到的。

在一个实施例中,判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用匹配的当前渲染组件进行渲染,包括:在当前游戏脚本语句为游戏脚本指令语句时,根据当前游戏脚本语句的脚本语句描述信息确定匹配的当前渲染组件,通过当前渲染组件对当前游戏脚本语句进行渲染。

具体地,判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用匹配的当前渲染组件进行渲染,具体可以是,确定当前游戏脚本语句为游戏脚本指令语句时,才能根据当前游戏脚本语句的描述信息确定匹配的当前渲染组件,通过当前渲染组件对当前游戏脚本语句进行渲染。

例如,渲染引擎会逐个读取AST,遇到指令脚本的AST,会调用对应的渲染组件进行渲染,遇到逻辑脚本的AST,会进行根据AST提供的信息来进行逻辑处理,如果是判断语句的AST,会先判断是否满足条件,如果满足条件,则根据该AST中的游戏脚本语句有可能是游戏脚本逻辑语句或者游戏脚本指令语句,如果是游戏脚本指令语句,则调用对应的渲染组件进行渲染等,反之,如果不满足条件,则读取的下一个AST。

例如,当前抽象语法树对应的目标游戏脚本语句为:

#if x>10//do player name=“xxx”file=“xxx”

#end。

其中,检测出目标游戏脚本语句为游戏脚本判断语句时,判断出当前抽象语法树的描述信息满足预设条件x>10,则获取当前抽象语法树对应的当前游戏脚本语句为playername=“xxx”file=“xxx”,由于该当前游戏脚本语句为游戏脚本指令语句,则调用匹配的视频渲染组件进行渲染。

在另一个实施例中,如果判断出当前抽象语法树的描述信息不满足预设条件时,则获取下一个抽象语法树,将其确定为当前抽象语法树进行判断。

在一个实施例中,如图7所示,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染,包括:

步骤702,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,从洋葱模型注册的渲染组件中确定与读取的抽象语法树匹配的目标渲染组件。

步骤704,通过目标渲染组件对渲染上下文进行判断决定自身是否需要渲染。

步骤706,如果需要渲染,则通过目标渲染组件对读取的抽象语法树进行渲染。

其中,这里的洋葱模型是一个插件机制,解耦各渲染组件,使得各渲染组件之间松耦合。具体地,渲染引擎逐个读取抽象语法树集中各抽象语法树,根据目前正在读取的抽象语法树从洋葱模型注册的渲染组件中确定目标渲染组件。具体可以是,根据正在读取的抽象语法树的描述信息确定得到。进一步地,再通过目标渲染组件对渲染上下文进行判断决定自身是否需要渲染,因为有些目标渲染组件已经不需要再进行渲染或者是其他因素导致不需要再进行渲染,因此需要通过目标渲染组件对渲染上下文进行判断决定自身是否需要渲染,如果需要渲染,则通过目标渲染组件对读取的抽象语法树进行渲染。

在一个实施例中,客户端可内置相应版本的通用渲染引擎,首先下载游戏脚本内容与游戏资源的对应表,读取通用渲染引擎对应的当前游戏脚本内容时,根据对应表去获取相应的当前游戏资源,通过客户端内置的通用渲染引擎进行当前游戏资源的渲染,生成当前游戏。其中,可以在发版游戏时提前将所有的游戏资源上传到cdn网络中,在读取当前游戏脚本内容时,可以从相应的cdn网络中获取相应的当前游戏资源,对应表记录了当前游戏资源所在的cdn地址。

其中,将游戏脚本内容与游戏资源分离、以及与渲染引擎进行分离,能够保证了代码内核的纯净,有利于维护和管理,便于版本迭代;发布项目时仅需发布脚本文件,相应资源从cdn加速下载,大幅提高了项目发布和运行速度。

在一个具体的实施例中,提供了一种游戏脚本处理方法,具体包括以下步骤:

1、获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的。

1-1、获取编辑器编辑好的游戏脚本内容,将游戏脚本内容上传至内容分发网络中。

1-2、发送获取请求,根据获取请求从内容分发网络中拉取待处理游戏脚本内容。

2、对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式。

2-1、调用目标操作系统文件,目标操作系统文件是根据目标操作系统的预设语法规则编写得到的。

2-2、根据目标操作系统文件从各待执行游戏脚本语句中得到筛选后的多个待执行游戏脚本语句。

2-3、将筛选后的多个待执行游戏脚本语句转换为对应的标记序列,调用匹配的回调函数,通过回调函数将各标记序列进行转换得到抽象语法树集。

3、通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。

3-1-1、通过渲染引擎读取当前抽象语法树,当前抽象语法树是抽象语法树集中的任意一个。

3-1-2、在当前抽象语法树对应的目标游戏脚本语句为游戏脚本指令语句时,根据当前抽象语法树的抽象语法树描述信息确定与当前抽象语法树匹配的当前渲染组件,通过当前渲染组件对当前抽象语法树进行渲染。

3-1-3、在当前抽象语法树对应的目标游戏脚本语句为游戏脚本逻辑语句,且目标游戏脚本语句为游戏脚本判断语句时,根据当前抽象语法树的描述信息判断是否满足预设判断条件。

3-1-4、如果满足,获取当前抽象语法树对应的当前游戏脚本语句,当前游戏脚本语句是当前抽象语法树对应的多个目标游戏脚本语句中的任意一个。

3-1-5、判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用与当前游戏脚本语句匹配的当前渲染组件进行渲染。

其中,在当前游戏脚本语句为游戏脚本指令语句时,根据当前游戏脚本语句的脚本语句描述信息确定匹配的当前渲染组件,通过当前渲染组件对当前游戏脚本语句进行渲染。

3-2-1、通过渲染引擎逐个读取抽象语法树集中各抽象语法树,从洋葱模型注册的渲染组件中确定与读取的抽象语法树匹配的目标渲染组件。

3-2-2、通过目标渲染组件对渲染上下文进行判断决定自身是否需要渲染。

3-2-3、如果需要渲染,则通过目标渲染组件对读取的抽象语法树进行渲染。

应该理解的是,虽然上述流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图8所示,提供了一种游戏脚本处理装置800,包括:获取模块802、解析模块804和渲染模块806,其中:

获取模块802,用于获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的。

解析模块804,用于对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式。

渲染模块806,用于通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。

在一个实施例中,获取模块802获取编辑器编辑好的游戏脚本内容,将游戏脚本内容上传至内容分发网络中,发送获取请求,根据获取请求从内容分发网络中拉取待处理游戏脚本内容。

在一个实施例中,解析模块804调用目标操作系统文件,目标操作系统文件是根据目标操作系统的预设语法规则编写得到的,根据目标操作系统文件从各待执行游戏脚本语句中得到筛选后的多个待执行游戏脚本语句,将筛选后的多个待执行游戏脚本语句转换为对应的标记序列,调用匹配的回调函数,通过回调函数将各标记序列进行转换得到抽象语法树集。

在一个实施例中,渲染模块806通过渲染引擎读取当前抽象语法树,当前抽象语法树是抽象语法树集中的任意一个,在当前抽象语法树对应的目标游戏脚本语句为游戏脚本指令语句时,根据当前抽象语法树的抽象语法树描述信息确定与当前抽象语法树匹配的当前渲染组件,通过当前渲染组件对当前抽象语法树进行渲染。

在一个实施例中,渲染模块806在当前抽象语法树对应的目标游戏脚本语句为游戏脚本逻辑语句,且目标游戏脚本语句为游戏脚本判断语句时,根据当前抽象语法树的描述信息判断是否满足预设判断条件,如果满足,获取当前抽象语法树对应的当前游戏脚本语句,当前游戏脚本语句是当前抽象语法树对应的多个目标游戏脚本语句中的任意一个,判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用与当前游戏脚本语句匹配的当前渲染组件进行渲染。

在一个实施例中,渲染模块806在当前游戏脚本语句为游戏脚本指令语句时,根据当前游戏脚本语句的脚本语句描述信息确定匹配的当前渲染组件,通过当前渲染组件对当前游戏脚本语句进行渲染。

在一个实施例中,渲染模块806通过渲染引擎逐个读取抽象语法树集中各抽象语法树,从洋葱模型注册的渲染组件中确定与读取的抽象语法树匹配的目标渲染组件,通过目标渲染组件对渲染上下文进行判断决定自身是否需要渲染,如果需要渲染,则通过目标渲染组件对读取的抽象语法树进行渲染。

关于游戏脚本处理装置的具体限定可以参见上文中对于游戏脚本处理方法的限定,在此不再赘述。上述游戏脚本处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储游戏脚本内容。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种游戏脚本处理方法。

本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的,对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取编辑器编辑好的游戏脚本内容,将游戏脚本内容上传至内容分发网络中,发送获取请求,根据获取请求从内容分发网络中拉取待处理游戏脚本内容。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:调用目标操作系统文件,目标操作系统文件是根据目标操作系统的预设语法规则编写得到的,根据目标操作系统文件从各待执行游戏脚本语句中得到筛选后的多个待执行游戏脚本语句,将筛选后的多个待执行游戏脚本语句转换为对应的标记序列,调用匹配的回调函数,通过回调函数将各标记序列进行转换得到抽象语法树集。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:通过渲染引擎读取当前抽象语法树,当前抽象语法树是抽象语法树集中的任意一个,在当前抽象语法树对应的目标游戏脚本语句为游戏脚本指令语句时,根据当前抽象语法树的抽象语法树描述信息确定与当前抽象语法树匹配的当前渲染组件,通过当前渲染组件对当前抽象语法树进行渲染。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:在当前抽象语法树对应的目标游戏脚本语句为游戏脚本逻辑语句,且目标游戏脚本语句为游戏脚本判断语句时,根据当前抽象语法树的描述信息判断是否满足预设判断条件,如果满足,获取当前抽象语法树对应的当前游戏脚本语句,当前游戏脚本语句是当前抽象语法树对应的多个目标游戏脚本语句中的任意一个,判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用与当前游戏脚本语句匹配的当前渲染组件进行渲染。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用匹配的当前渲染组件进行渲染,包括:在当前游戏脚本语句为游戏脚本指令语句时,根据当前游戏脚本语句的脚本语句描述信息确定匹配的当前渲染组件,通过当前渲染组件对当前游戏脚本语句进行渲染。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:通过渲染引擎逐个读取抽象语法树集中各抽象语法树,从洋葱模型注册的渲染组件中确定与读取的抽象语法树匹配的目标渲染组件,通过目标渲染组件对渲染上下文进行判断决定自身是否需要渲染,如果需要渲染,则通过目标渲染组件对读取的抽象语法树进行渲染。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取待处理游戏脚本内容,待处理游戏脚本内容包括多个待执行游戏脚本语句,待执行游戏脚本语句是使用领域特定语言描述的,对待处理游戏脚本内容进行解析,得到待处理游戏脚本内容对应的抽象语法树集,抽象语法树集包括多个抽象语法树,抽象语法树是对应的待执行游戏脚本语句的抽象语法结构的树状表现形式,通过渲染引擎逐个读取抽象语法树集中各抽象语法树,调用与读取的抽象语法树匹配的渲染组件进行渲染。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取编辑器编辑好的游戏脚本内容,将游戏脚本内容上传至内容分发网络中,发送获取请求,根据获取请求从内容分发网络中拉取待处理游戏脚本内容。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:调用目标操作系统文件,目标操作系统文件是根据目标操作系统的预设语法规则编写得到的,根据目标操作系统文件从各待执行游戏脚本语句中得到筛选后的多个待执行游戏脚本语句,将筛选后的多个待执行游戏脚本语句转换为对应的标记序列,调用匹配的回调函数,通过回调函数将各标记序列进行转换得到抽象语法树集。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:通过渲染引擎读取当前抽象语法树,当前抽象语法树是抽象语法树集中的任意一个,在当前抽象语法树对应的目标游戏脚本语句为游戏脚本指令语句时,根据当前抽象语法树的抽象语法树描述信息确定与当前抽象语法树匹配的当前渲染组件,通过当前渲染组件对当前抽象语法树进行渲染。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:在当前抽象语法树对应的目标游戏脚本语句为游戏脚本逻辑语句,且目标游戏脚本语句为游戏脚本判断语句时,根据当前抽象语法树的描述信息判断是否满足预设判断条件,如果满足,获取当前抽象语法树对应的当前游戏脚本语句,当前游戏脚本语句是当前抽象语法树对应的多个目标游戏脚本语句中的任意一个,判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用与当前游戏脚本语句匹配的当前渲染组件进行渲染。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:判断当前游戏脚本语句是否为游戏脚本指令语句来确定是否需要调用匹配的当前渲染组件进行渲染,包括:在当前游戏脚本语句为游戏脚本指令语句时,根据当前游戏脚本语句的脚本语句描述信息确定匹配的当前渲染组件,通过当前渲染组件对当前游戏脚本语句进行渲染。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:通过渲染引擎逐个读取抽象语法树集中各抽象语法树,从洋葱模型注册的渲染组件中确定与读取的抽象语法树匹配的目标渲染组件,通过目标渲染组件对渲染上下文进行判断决定自身是否需要渲染,如果需要渲染,则通过目标渲染组件对读取的抽象语法树进行渲染。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

技术分类

06120113801610