HI,欢迎来到起点商标网!
24小时服务QQ:2880605093

一种游戏中游戏事件的处理方法、服务器及可读存储介质与流程

2021-01-11 10:01:40|301|起点商标网
一种游戏中游戏事件的处理方法、服务器及可读存储介质与流程

本申请涉及游戏流程处理技术领域,具体而言,涉及一种游戏中游戏事件的处理方法、服务器及可读存储介质。



背景技术:

随着游戏研发技术的不断发展,产生了各式各样的游戏类型,mmorpg(大型多人同时在线游戏)便是其中的一种,在mmorpg游戏的运行过程中,待执行的多个游戏事件的逻辑都会在服务器的后台进行存储,随着玩家数量的增多,导致待执行游戏事件增多,服务器需要存储的游戏事件的逻辑也随之增加,服务器内存空间将被大量占用,并且在游戏中的多个虚拟角色同时执行游戏任务时,需要服务器同时调用多个游戏事件的逻辑,游戏数据量大,游戏运行流畅度较低。



技术实现要素:

有鉴于此,本申请的目的在于提供一种游戏中游戏事件的处理方法、服务器及可读存储介质,能够通过在服务器中以单例形式存储游戏事件的预设节点图、预设图和/或预设节点,将具有相同功能逻辑的预设节点图、预设图和/或预设节点只存储一份,并且在进行存储时,将对应的数据以及逻辑结构分离存储,运行时分别调用,有助于节省服务器的内存空间,降低游戏数据量。

本申请实施例提供了一种游戏中游戏事件的处理方法,所述处理方法包括:

基于待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,以确定所述待执行游戏事件的事件节点图;

基于所述待执行游戏事件的属性信息,调用与所述事件节点图中各节点对应的数据;

根据所述事件节点图和所述数据,控制游戏中的虚拟角色执行所述待执行游戏事件。

进一步的,所述节点图缓存池中存储有多种预设节点图以及多种节点和/或多种图,每种预设节点图以及每种图和/或每种节点用以实现一种事件中的至少部分事件逻辑。

进一步的,通过以下步骤确定所述事件节点图:

从节点图缓存池中提取出以单例形式存储的、与所述事件信息匹配的预设节点图,并将匹配出的预设节点图作为所述待执行游戏事件的事件节点图;

或者,从节点图缓存池中提取出以单例形式存储的、与所述事件信息部分匹配的预设节点图,以及部分匹配的图和/或节点,通过提取出的预设节点图以及提取出的图和/或节点,构建所述待执行游戏事件的事件节点图。

进一步的,所述处理方法还包括:

若所述节点图缓存池中缺少与所述待执行游戏事件的事件信息相匹配的、至少部分的预设节点图、图和/或节点,根据所述待执行游戏事件的事件信息,构建缺少的预设节点图、图和/或节点;

将构建的预设节点图、图和/或节点添加至节点图缓存池中。

进一步的,所述节点包括以下节点中的一种或者多种:

事件节点、条件节点、行为节点和状态节点。

进一步的,当所述事件节点图中包括状态节点时,所述处理方法还包括:

基于所述待执行游戏事件的属性信息,生成与所述状态节点对应的动态数据,并缓存所述动态数据。

进一步的,当所述事件节点图中包括状态节点时,所述处理方法还包括:

在所述虚拟角色执行所述待执行游戏事件中的所述状态节点时,将所述动态数据挂接在所述状态节点依附的虚拟对象上,以使所述动态数据能够被动态调用;

在所述状态节点被执行完毕后,将所述动态数据从所述虚拟对象上解除挂接,以动态释放所述动态数据。

进一步的,所述处理方法还包括:

确定更新目标对象,其中,所述更新目标对象包括更新节点图、更新图和更新节点;

在游戏运行的过程中,将所述更新目标对象添加至所述节点图缓存池中,并将使用完毕的与所述更新目标对象对应的待更新目标对象从所述节点图缓存池中删除,以释放所述待更新目标对象,其中,所述待更新目标对象包括待更新的预设图和/或预设节点。

本申请实施例还提供了一种服务器,所述服务器包括:

节点图确定模块,用于基于待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,以确定所述待执行游戏事件的事件节点图;

数据调用模块,用于基于所述待执行游戏事件的属性信息,调用与所述事件节点图中各节点对应的数据;

事件执行模块,用于根据所述事件节点图和所述数据,控制游戏中的虚拟角色执行所述待执行游戏事件。

进一步的,所述节点图缓存池中存储有多种预设节点图以及多种节点和/或多种图,每种预设节点图以及每种图和/或每种节点用以实现一种事件中的至少部分事件逻辑。

进一步的,所述节点图确定模块用于通过以下步骤确定所述事件节点图:

从节点图缓存池中提取出以单例形式存储的、与所述事件信息匹配的预设节点图,并将匹配出的预设节点图作为所述待执行游戏事件的事件节点图;

或者,从节点图缓存池中提取出以单例形式存储的、与所述事件信息部分匹配的预设节点图,以及部分匹配的图和/或节点,通过提取出的预设节点图以及提取出的图和/或节点,构建所述待执行游戏事件的事件节点图。

进一步的,所述服务器还包括添加模块,所述添加模块用于:

若所述节点图缓存池中缺少与所述待执行游戏事件的事件信息相匹配的、至少部分的预设节点图、图和/或节点,根据所述待执行游戏事件的事件信息,构建缺少的预设节点图、图和/或节点;

将构建的预设节点图、图和/或节点添加至节点图缓存池中。

进一步的,所述节点包括以下节点中的一种或者多种:

事件节点、条件节点、行为节点和状态节点。

进一步的,当所述事件节点图中包括状态节点时,所述服务器还包括数据生成模块,所述数据生成模块用于:

基于所述待执行游戏事件的属性信息,生成与所述状态节点对应的动态数据,并缓存所述动态数据。

进一步的,当所述事件节点图中包括状态节点时,所述服务器还包括数据挂接模块,所述数据挂接模块用于:

在所述虚拟角色执行所述待执行游戏事件中的所述状态节点时,将所述动态数据挂接在所述状态节点依附的虚拟对象上,以使所述动态数据能够被动态调用;

在所述状态节点被执行完毕后,将所述动态数据从所述虚拟对象上解除挂接,以动态释放所述动态数据。

进一步的,所述服务器还包括更新模块,所述更新模块用于:

确定更新目标对象,其中,所述更新目标对象包括更新节点图、更新图和更新节点;

在游戏运行的过程中,将所述更新目标对象添加至所述节点图缓存池中,并将使用完毕的与所述更新目标对象对应的待更新目标对象从所述节点图缓存池中删除,以释放所述待更新目标对象,其中,所述待更新目标对象包括待更新的预设图和/或预设节点。

本申请实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如上述的游戏中游戏事件的处理方法的步骤。

本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如上述的游戏中游戏事件的处理方法的步骤。

本申请实施例提供的游戏中游戏事件的处理方法、服务器及可读存储介质,基于待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,以确定所述待执行游戏事件的事件节点图;基于所述待执行游戏事件的属性信息,调用与所述事件节点图中各节点对应的数据;根据所述事件节点图和所述数据,控制游戏中的虚拟角色执行所述待执行游戏事件。

这样,根据待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及以单例形式存储的预设图和/或预设节点,确定事件节点图,并根据待执行游戏事件的属性信息,确定与事件节点图相关联的数据,根据事件节点图和数据,控制游戏中的虚拟角色执行所述待执行游戏事件,从而能够通过在服务器中以单例形式存储游戏事件的预设节点图、预设图和/或预设节点,将具有相同功能逻辑的预设节点图、预设图和/或预设节点只存储一份,并且在进行存储时,将对应的数据以及逻辑结构分离存储,运行时分别调用,有助于节省服务器的内存空间,降低游戏数据量。

为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例所提供的一种游戏中游戏事件的处理方法的流程图;

图2为传统节点图缓存池的缓存示意图;

图3为单例形式节点图缓存池的缓存示意图;

图4为本申请另一实施例提供的一种游戏中游戏事件的处理方法的流程图;

图5为更新流程示意图;

图6为本申请实施例所提供的一种服务器的结构示意图之一;

图7为本申请实施例所提供的一种服务器的结构示意图之二;

图8为本申请实施例所提供的一种电子设备的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的每个其他实施例,都属于本申请保护的范围。

首先,对本申请可适用的应用场景进行介绍。本申请可应用于游戏流程处理技术领域,随着游戏研发节奏的加快,生产端对游戏研发时的扩展性、稳定性和易于维护性提出了更高要求,游戏研发有向模块化、标准化和工具化发展的趋势。具体来说,如果模块化的代码能够尽可能多地被复用,那么就更能接近扩展性、稳定性和易于维护性更高的目标,在游戏的设计过程中,对于游戏逻辑功能的创建,将更可能多的以模块化的形式进行呈现,如果有足够的基础功能模块,那么对于绝大多数功能需求,是可以通过基础功能模块组合出来,因此对游戏执行逻辑的模块化开发是很有必要的。

经研究发现,随着游戏研发技术的不断发展,产生了各式各样的游戏类型,mmorpg(大型多人同时在线游戏)便是其中的一种,在mmorpg游戏的运行过程中,待执行的多个游戏事件的逻辑都会在服务器的后台进行存储,随着玩家数量的增多,导致待执行游戏事件增多,服务器需要存储的游戏事件的逻辑也随之增加,服务器内存空间将被大量占用,并且在游戏中的多个虚拟角色同时执行游戏任务时,需要服务器同时调用多个游戏事件的逻辑,游戏数据量大,游戏运行流畅度较低。

基于此,本申请实施例提供了一种游戏中游戏事件的处理方法,能够通过在服务器中以单例形式存储游戏事件的预设节点图、预设图和/或预设节点,将具有相同功能逻辑的预设节点图、预设图和/或预设节点只存储一份,并且在进行存储时,将对应的数据以及逻辑结构分离存储,有助于节省服务器的内存空间。

请参阅图1,图1为本申请实施例所提供的一种游戏中游戏事件的处理方法的流程图。所如图1中所示,本申请实施例提供的游戏中游戏事件的处理方法,包括:

s101、基于待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,以确定所述待执行游戏事件的事件节点图。

该步骤中,根据游戏中待执行的游戏事件的事件信息,从预先设置的节点图缓存池中提取出与待执行游戏事件相关联的预设节点图以及预设图和/或预设节点,基于提取出的预设节点图以及预设图和/或预设节点,生成待执行游戏事件的事件节点图。

这里,待执行游戏事件指的是在游戏进程中可能发生的一系列事件,例如,在大逃杀类游戏中,虚拟角色根据任务需要发动的一次进攻,这次进攻就可以被视为一件待执行游戏事件。

这里,待执行游戏事件的事件信息,指示了该待执行游戏事件所要执行的动作以及想要达到的效果等。例如,该待执行游戏事件为攻击事件,那么与之对应的事件信息可以包括攻击目标对象的条件,以及需要给被攻击对象造成的伤害效果等,或是该事件信息是预先设置的事件标识(id),将事件id作为一个key,寻找与之匹配的预设节点图。

这里,节点图缓存池是在游戏设置最初根据游戏的基础需求,搭建的,用于存储游戏执行流程、执行事件等相匹配的缓存区域,以保证游戏进程的顺利进行。

其中,在节点图缓存池中存储的可以是与一个完整游戏事件相对应的预设节点图;或者是每个游戏事件都有可能用到的预设图;再或者是构成节点图的基本节点,这些节点可以是事件节点、条件节点、行为节点和状态节点中的一种或多种。

其中,存储预设节点图的脚本语言可以是flowscript,事件节点是脚本执行的起始点,它的作用是响应游戏中的某个游戏事件,例如技能开始,触发一个脉冲给到它的输出,从而激活所在节点图中的后面的节点;条件节点会影响脚本执行流程,基于一些表达式的结果输出“是”或者“否”等来选择后续继续执行的节点;行为节点基本上就是执行数据的调用,以执行相应的函数对应的功能;状态节点代表一些正在进行中的游戏事件。在状态节点的输入接口收到激活脉冲后,状态节点则处于激活状态。然后状态节点就会一直保持激活状态,直到它自己决定关闭,或者是因为外部原因而被动结束。

这里,在节点图缓存池进行存储时,都是以单例的形式存储预设节点图、预设图以及预设节点的,即,在节点图缓存池中存储有多种预设节点图以及多种节点和/或多种图,每种预设节点图以及每种图和/或每种节点用以实现一种游戏事件中的至少部分游戏事件逻辑,每个预设节点图执行的游戏事件不同,每个预设图和/或每种节点实现的游戏事件逻辑也不同。

这样,在节点图缓存池中以单例形式存储预设节点图、预设图以及预设节点,尤其是针对不同玩家的相同游戏事件,可以只在节点图缓存池中存储一个该游戏事件的逻辑节点图,以节省节点图缓存池的存储空间,进而使得服务器能够同时支持多个玩家在同一时间点上的操作,请同时参阅图2以及图3,图2为传统节点图缓存池的缓存示意图,图3为单例形式节点图缓存池的缓存示意图,如图2所示,共有三位玩家:玩家a、玩家b以及玩家c,根据玩家的需求,在传统节点图缓存池200中存储有玩家a的技能1节点图210、玩家b的技能1节点图220、玩家c的技能1节点图230以及玩家b的技能2节点图240,这样需要每个技能事件对应的逻辑节点图都进行存储,消耗了节点图缓存池的内存;如图3所示,还是上述三个玩家,但是由于玩家a、玩家b以及玩家c要执行的技能1的逻辑是完全相同的,在单例节点图缓存池300中,将玩家a、玩家b以及玩家c的技能1统一存储在技能1节点图310中,将玩家b不同于玩家a以及玩家c的独特的技能2存储在玩家b的技能2节点图320中,这样,经过图2以及图3的对比,可知单例的存储模式是有助于节省存储空间的。

s102、基于所述待执行游戏事件的属性信息,调用与所述事件节点图中各节点对应的数据。

该步骤中,根据待执行游戏事件的属性信息,调用与该待执行游戏事件对应的事件节点图中各节点对应的数据。

这里,待执行游戏事件的属性信息,指示了该待执行游戏事件所要执行的动作以及想要达到的效果等。例如,该待执行游戏事件为攻击事件,那么与之对应的事件信息可以包括攻击的目标对象的条件,以及需要给被攻击对象造成的伤害效果等;在游戏最初的脚本形成过程中,每个动作都会有对应的数据,每个数据通过逻辑设置以及数据调用逻辑的设置,完成相应的动作。

其中,在flowscript中的数据可以包括变量和属性两种,属性是指某个实体对象的某个数值,比如目标实体血量,施法者攻击力等都是属性;变量则是flowscript运行过程中,动态产生的一些数据,隶属于flowscript当前运行的上下文环境(flowcontext),所有节点都可以修改或访问这些数据;例如,一个功能为setvar的行为点,它可以设置一个变量new_var值为1,另一个条件节点可以判断new_var的值,输出不同结果。更为复杂一些,行为节点可以按照一定规则搜寻目标范围内的敌方单位,如果搜寻到则存储在名为target_list的变量中,等后续攻击行为的节点需要敌方单位这个变量时,则可以填入之前获得target_list变量,对target_list中的单位进行攻击;同时在游戏事件的逻辑设计中,还需要调用相应的功能函数,这些函数可以表示相应的虚拟角色可以执行的游戏动作以及达到的效果等。

以该次游戏事件为三次攻击过程为例,在当hit1击中目标后,进行一个条件判定如果敌方血量少于50%,则hit2的伤害系数翻倍,如果目标身上带有石化效果,那么hit3有10%的概率,造成致命一击。这里,需要调用的数据有条件判断函数、伤害系数翻倍函数,以及石化效果函数等。

这样,在确定出相关的数据后,通过函数调用赋予每个节点相应的功能,确定待执行游戏事件的执行逻辑。

s103、根据所述事件节点图和所述数据,控制游戏中的虚拟角色执行所述待执行游戏事件。

该步骤中,根据确定出的节点图中每个节点执行顺序以及每个节点调用的函数对应的功能逻辑,控制游戏中的虚拟角色执行所述待执行游戏事件。

这里,针对于上述示例,待执行游戏事件为三次攻击事件,首先确定出三次攻击事件对应的预设节点图,以及每个节点对应的攻击函数、条件判断函数、伤害系数翻倍函数,以及石化效果函数等。首先触动事件节点,开始执行三次攻击的流程,在通过行为节点调用攻击函数执行第一次攻击hit1,在执行完毕后,条件节点调用条件判断函数,判断敌方血量是否少于50%,若确定敌方血量少于50%,行为节点调用攻击函数以及伤害系数翻倍函数执行第二次攻击hit2,在第二次功能执行完毕后,条件节点判断虚拟角色身上是否带有石化效果,若确定虚拟角色身上带有石化效果,行为节点调用攻击函数以及石化效果函数执行第三次攻击hit3,至此,完成三次攻击这个游戏事件。

本申请实施例提供的游戏中游戏事件的处理方法,基于待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,以确定所述待执行游戏事件的事件节点图;基于所述待执行游戏事件的属性信息,调用与所述事件节点图中各节点对应的数据;根据所述事件节点图和所述数据,控制游戏中的虚拟角色执行所述待执行游戏事件。

这样,根据待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,确定事件节点图,并根据待执行游戏事件的属性信息,确定与事件节点图相关联的数据,根据事件节点图和数据,控制游戏中的虚拟角色执行所述待执行游戏事件,从而能够通过在服务器中以单例形式存储游戏事件的预设节点图、预设图和/或预设节点,将具有相同功能逻辑的预设节点图、预设图和/或预设节点只存储一份,并且在进行存储时,将对应的数据以及逻辑结构分离存储,运行时分别调用,有助于节省服务器的内存空间,降低游戏数据量。

请参阅图4,图4为本申请另一实施例提供的一种游戏中游戏事件的处理方法的流程图。如图4中所示,本申请实施例提供的游戏中游戏事件的处理方法,包括:

s401、基于待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,以确定所述待执行游戏事件的事件节点图。

s402、基于所述待执行游戏事件的属性信息,调用与所述事件节点图中各节点对应的数据。

s403、根据所述事件节点图和所述数据,控制游戏中的虚拟角色执行所述待执行游戏事件。

s404、确定更新目标对象,其中,所述更新目标对象包括更新节点图、更新图和更新节点。

该步骤中,在游戏进行过程中,可能会存在需求更新的情况,这时,根据要更新的需求,确定出需要更新的更新节点图、更新图和更新节点。

这里,在本申请实施例中的更新是热更新,仅仅是更新图和节点的缓存池,不影响正在运行的节点图的逻辑调用以及功能实现。

s405、在游戏运行的过程中,将所述更新目标对象添加至所述节点图缓存池中,并将使用完毕的与所述更新目标对象对应的待更新目标对象从所述节点图缓存池中删除,以释放所述待更新目标对象,其中,所述待更新目标对象包括待更新的预设图和/或预设节点。

该步骤中,在游戏的正常进行中,将更新目标对象添加至所述节点图缓存池中,并在确定与更新目标对象对应的待更新目标对象使用完毕后,将待更新目标对象从所述节点图缓存池中删除,确定同一功能逻辑的预设图和/或预设节点在节点图缓存池中是单例存储的。

请参阅图5,图5为更新流程示意图,如图5中所示,当热更新发生前,玩家a的技能510在运行时调用待更新节点图520,同时玩家b的技能530也在运行时调用待更新节点图520,那么玩家a和玩家b的技能的释放不会受到任何影响,直到他们的技能运行结束的时候,并在玩家a以及玩家b运行技能的同时,生成更新后的更新节点图540,并将更新节点图540放入节点缓存池550,利用动态语言的引用计数回收机制,旧的节点图没有再被任何玩家技能调用,那么旧的节点图则会被动态语言的垃圾回收器释放。这一机制的关键,在于节点图热更新一定不能直接更新运行时的节点图,只能更新缓存池对象。

其中,s401至s403的描述可以参照s101至s103的描述,并且能达到相同的技术效果,对此不做赘述。

进一步的,通过以下步骤确定所述事件节点图:从节点图缓存池中提取出以单例形式存储的、与所述事件信息匹配的预设节点图,并将匹配出的预设节点图作为所述待执行游戏事件的事件节点图;或者,从节点图缓存池中提取出以单例形式存储的、与所述事件信息部分匹配的预设节点图,以及部分匹配的图和/或节点,通过提取出的预设节点图以及提取出的图和/或节点,构建所述待执行游戏事件的事件节点图。

该步骤中,在确定出待执行游戏事件后,如果存在有与待执行游戏事件匹配的预设节点图,从节点图缓存池中提取出该预设节点图,并将该预设节点图作为所述待执行游戏事件的事件节点图;如果不存在与待执行游戏事件完全匹配的预设节点图,但是在节点图缓存池中有与待执行游戏事件部分匹配的预设节点图,以及部分匹配的图和/或节点,将这些部分匹配的预设节点图、图和/或节点提取出来,按照待执行游戏事件的事件信息,构建所述待执行游戏事件的事件节点图。

这里,有的待执行游戏事件是在游戏中比较常用的,这些待执行游戏事件在游戏最初设置时已经设置完成,并存储在节点图缓存池中,当执行这类游戏事件时,直接从节点图缓存池中调用,将构建好的预设节点图作为所述待执行游戏事件的事件节点图,执行待执行游戏事件即可;而有一些待执行游戏事件,可能是一款游戏中独有的,或是由于游戏更新后,新增的游戏事件,在节点图缓存池中不存在与这些待执行游戏事件完全匹配的预设节点图,但是,由于游戏的功能都是在原有的游戏功能中衍生出来的,所以在节点图缓存池中可能存在所述事件信息部分匹配的预设节点图,以及部分匹配的图和/或节点,将这些部分匹配的预设节点图,以及图和/或节点提取出来,按照待执行游戏事件的事件信息,构建事件节点图。

例如,待执行游戏事件是连续三次攻击,在节点图缓存池中并没有与连续三次攻击匹配的预设节点图,在节点图缓存池中存在单次攻击的预设节点图,以及待执行游戏事件的事件信息指示的每两次攻击之间的条件节点,将单次攻击的预设节点图以及每两次攻击之间的条件节点提取出来,按照执行顺序,构建与连续三次攻击匹配的事件节点图。

进一步的,所述处理方法还包括:若所述节点图缓存池中缺少与所述待执行游戏事件的事件信息相匹配的、至少部分的预设节点图、图和/或节点,根据所述待执行游戏事件的事件信息,构建缺少的预设节点图、图和/或节点;将构建的预设节点图、图和/或节点添加至节点图缓存池中。

该步骤中,在确定出待执行游戏事件后,将根据待执行游戏事件的事件id寻找与该待执行游戏事件相匹配的至少部分的预设节点图、图和/或节点,如果发现并不存在与该待执行游戏事件相匹配的至少部分的预设节点图、图和/或节点,需要根据需求构建可以执行该游戏事件的事件逻辑的预设节点图、图和/或节点;将构建好的预设节点图、图和/或节点添加至节点图缓存池中。

这里,在构建预设节点图、图和/或节点的时候,是以游戏事件的需求为出发点的,例如,该游戏事件中,需要在虚拟角色发动进攻时,判断虚拟角色的血量,当虚拟角色的血量大于80%时,会在虚拟角色周围形成火焰的效果,那么根据需求,需要构建用户判断血量是否大于80%的条件节点,以及执行火焰的效果的行为节点,还需要构建判断血量是否大于80%的判断函数,以及执行火焰的效果的火焰函数,在构建节点过程中,还需要将构建的函数与节点进行关联。

这里,在将构建好的预设节点图、图和/或节点添加至节点图缓存池中时,可以根据节点属性确定存储区域,如将条件节点与其他条件节点放置在一起,或是将构建好的预设节点图、图和/或节点放置在可以一起构成待执行游戏事件的多个预设节点图、图和/或节点所处的区域。

这里,在构建预设节点图、图和/或节点时,如果构建的是除状态节点之外的事件节点、条件节点、行为节点,那么可以在flowscript构建时,在每一个节点处枚举好的一系列选项,编辑者可以很方便地按需选择比较的对象,以及对象身上的属性;如果构建的是状态节点,那么可以在flowscript构建时,还需要为状态节点添加动态数据(变量)。

进一步的,当所述事件节点图中包括状态节点时,所述处理方法还包括:基于所述待执行游戏事件的属性信息,生成与所述状态节点对应的动态数据,并缓存所述动态数据。

该步骤中,当事件节点图中包括状态节点时,根据待执行游戏事件的属性信息,生成在每个状态下的动态数据,并将动态数据与节点状态关联缓存。

这里,状态节点的功能是设计一些实时状态信息的维护,例如游戏中虚拟角色的位置、血量、某些算法的状态等,所以除了单例节点外,还需要维护一份状态信息。状态节点的出口通常是处于该状态的一些事件,例如技能状态节点则有击中、打断、结束等事件,按钮状态节点则有按下、抬起等事件。事件触发时状态节点可以退出状态节点也可以继续状态节点,具体实现可由实现该状态节点的游戏设置的需求决定。

这里,动态节点对应的节点以及数据采用静态数据和运行时数据分离的存储模式,即动态节点对应的执行逻辑框架是以单例的存储模式存储在节点图缓存池中,而在游戏运行时用于描述游戏事件状态的数据,将是在游戏运行中动态创建,在该事件执行完毕后,将创建的动态数据删除,这样,图和节点的内存占用不会随着逻辑调用次数的增加而增加,达到了节省内存的技术效果。

进一步的,当所述事件节点图中包括状态节点时,所述处理方法还包括:在所述虚拟角色执行所述待执行游戏事件中的所述状态节点时,将所述动态数据挂接在所述状态节点依附的虚拟对象上,以使所述动态数据能够被动态调用;在所述状态节点被执行完毕后,将所述动态数据从所述虚拟对象上解除挂接,以动态释放所述动态数据。

该步骤中,当事件节点图中包括状态节点时,在虚拟角色要执行所述待执行游戏事件中的所述状态节点时,将与该状态节点相匹配的状态信息以及创建的动态数据与该虚拟角色关联起来,以使虚拟角色执行状态节点的逻辑信息,从而完成虚拟角色需要完成的游戏动作,在状态节点被执行完毕后,解除动态数据与虚拟角色的绑定,并释放创建的动态数据。

这里,创建的动态数据跟随虚拟角色执行动作结束后的动态释放而释放,因此不需要额外管理,大大增强了运行时内存的稳定性,不容易造成内存泄漏,同时也为降低了游戏设置的难度。

这样,根据待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,确定事件节点图,并根据待执行游戏事件的属性信息,确定与事件节点图相关联的数据,根据事件节点图和数据,控制游戏中的虚拟角色执行所述待执行游戏事件,并在有可更新的更新目标对象时,还需要在更新后,将更新后的更新对象添加至所述节点图缓存池中,从而能够通过在服务器中以单例形式存储游戏事件的预设节点图、预设图和/或预设节点,将具有相同功能逻辑的预设节点图、预设图和/或预设节点只存储一份,并且在进行存储时,将对应的数据以及逻辑结构分离存储,运行时分别调用,有助于节省服务器的内存空间,降低游戏数据量。

请参阅图6、图7,图6为本申请实施例所提供的一种服务器的结构示意图之一,图7为本申请实施例所提供的一种服务器的结构示意图之二。如图6中所示,所述服务器600包括:

节点图确定模块610,用于基于待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,以确定所述待执行游戏事件的事件节点图。

数据调用模块620,用于基于所述待执行游戏事件的属性信息,调用与所述事件节点图中各节点对应的数据。

事件执行模块630,用于根据所述事件节点图和所述数据,控制游戏中的虚拟角色执行所述待执行游戏事件。

进一步的,如图7所示,所述服务器600还包括添加模块640,所述添加模块640用于:

若所述节点图缓存池中缺少与所述待执行游戏事件的事件信息相匹配的、至少部分的预设节点图、图和/或节点,根据所述待执行游戏事件的事件信息,构建缺少的预设节点图、图和/或节点;

将构建的预设节点图、图和/或节点添加至节点图缓存池中。

进一步的,如图7所示,当所述事件节点图中包括状态节点时,所述服务器600还包括数据生成模块650,所述数据生成模块650用于:

基于所述待执行游戏事件的属性信息,生成与所述状态节点对应的动态数据,并缓存所述动态数据。

进一步的,如图7所示,当所述事件节点图中包括状态节点时,所述服务器600还包括数据挂接模块660,所述数据挂接模块660用于:

在所述虚拟角色执行所述待执行游戏事件中的所述状态节点时,将所述动态数据挂接在所述状态节点依附的虚拟对象上,以使所述动态数据能够被动态调用;

在所述状态节点被执行完毕后,将所述动态数据从所述虚拟对象上解除挂接,以动态释放所述动态数据。

进一步的,如图7所示,所述服务器600还包括更新模块670,所述更新模块670用于:

确定更新目标对象,其中,所述更新目标对象包括更新节点图、更新图和更新节点;

在游戏运行的过程中,将所述更新目标对象添加至所述节点图缓存池中,并将使用完毕的与所述更新目标对象对应的待更新目标对象从所述节点图缓存池中删除,以释放所述待更新目标对象,其中,所述待更新目标对象包括待更新的预设图和/或预设节点。

进一步的,所述节点图缓存池中存储有多种预设节点图以及多种节点和/或多种图,每种预设节点图以及每种图和/或每种节点用以实现一种事件中的至少部分事件逻辑。

进一步的,所述节点图确定模块610用于通过以下步骤确定所述事件节点图:

从节点图缓存池中提取出以单例形式存储的、与所述事件信息匹配的预设节点图,并将匹配出的预设节点图作为所述待执行游戏事件的事件节点图;

或者,从节点图缓存池中提取出以单例形式存储的、与所述事件信息部分匹配的预设节点图,以及部分匹配的图和/或节点,通过提取出的预设节点图以及提取出的图和/或节点,构建所述待执行游戏事件的事件节点图。

进一步的,所述节点包括以下节点中的一种或者多种:

事件节点、条件节点、行为节点和状态节点。

本申请实施例提供的服务器,基于待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,以确定所述待执行游戏事件的事件节点图;基于所述待执行游戏事件的属性信息,调用与所述事件节点图中各节点对应的数据;根据所述事件节点图和所述数据,控制游戏中的虚拟角色执行所述待执行游戏事件。

这样,根据待执行游戏事件的事件信息,从节点图缓存池中提取出以单例形式存储的预设节点图以及单例形式存储的预设图和/或预设节点,确定事件节点图,并根据待执行游戏事件的属性信息,确定与事件节点图相关联的数据,根据事件节点图和数据,控制游戏中的虚拟角色执行所述待执行游戏事件,从而能够通过在服务器中以单例形式存储游戏事件的预设节点图、预设图和/或预设节点,将具有相同功能逻辑的预设节点图、预设图和/或预设节点只存储一份,并且在进行存储时,将对应的数据以及逻辑结构分离存储,运行时分别调用,有助于节省服务器的内存空间,降低游戏数据量。

请参阅图8,图8为本申请实施例所提供的一种电子设备的结构示意图。如图8中所示,所述电子设备800包括处理器810、存储器820和总线830。

所述存储器820存储有所述处理器810可执行的机器可读指令,当电子设备800运行时,所述处理器810与所述存储器820之间通过总线830通信,所述机器可读指令被所述处理器810执行时,可以执行如上述图1以及图4所示方法实施例中的游戏中游戏事件的处理方法的步骤,具体实现方式可参见方法实施例,在此不再赘述。

本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时可以执行如上述图1以及图4所示方法实施例中的游戏中游戏事件的处理方法的步骤,具体实现方式可参见方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。

此文章来源于网络,如有侵权,请联系删除

tips