一种回合制战斗数据处理方法、装置及存储介质与流程
本发明涉及游戏数据处理技术领域,特别是一种回合制战斗数据处理方法、装置及存储介质。
背景技术:
在mmo(massivemultiplayeronline,大型多人在线游戏)类型游戏中,回合制战斗过程一般先创建一个战斗场景,然后把战斗单元都切入该战斗场景中,进而采用数据同步,即服务器计算、客户端播放的方式来处理数据,而且在每个大回合制中,将服务器的战斗结果在一个大循环里一次计算完,然后将计算结果一起发给客户端。
创建战斗场景,有两部分内存开销,一个是场景本身的内存开销,另一个是把所有玩家都切入该场景,并序列化所有玩家数据,战斗结束后,又将玩家切回原场景,切入战斗场景再切回原场景,玩家数据需要序列化两次,对于服务器来说都是不小的内存开销。另外,将每一回合战斗结果在一个大循环里一次计算完,对于单场战斗来说,这样处理是没有问题的,但是某一时刻服务器有大量战斗进行的时候,服务器的计算量会很大,比如boss战中,所有玩家都在打boss,就会出现多场战斗集中到服务器一帧计算的情况,以5个玩家对5个玩家为例,假设一个玩家单次出手耗时1-10ms,服务器1s对应30帧,即1帧计算耗时33ms,当有多场战斗计算集中到一帧计算,会产生相对较高的延迟,严重时会导致玩家卡顿。
技术实现要素:
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的回合制战斗数据处理方法、装置及存储介质,能够减少切换战斗场景带来的数据序列化过程,从而既可以减少大量的服务器内存开销,也可以有效减少服务器的内存回收压力,使服务器能够支持更多的在线玩家和更多场次的战斗。
根据本发明实施例的一方面,提供了一种回合制战斗数据处理方法,包括:
为不同场次战斗设置不同位面标识,其中,一场次战斗对应唯一位面标识;
将不同位面标识对应的场次战斗的资源封装为不同类对象,将所述不同类对象分别挂载至战斗场景对象,且不同位面标识对应的类对象互相独立;
对每一场次战斗在各回合制中产生的战斗数据进行处理,将处理结果反馈至相应场次战斗对应的客户端。
可选地,为不同场次战斗设置不同位面标识,包括:
依据所述不同场次战斗预先分配的标识id为相应场次战斗设置位面标识。
可选地,一场次战斗包含多个战斗单元,为不同场次战斗设置不同位面标识,包括:
为不同场次战斗设置不同位面标识,且为同一场次战斗包含的多个战斗单元设置相同的位面标识。
可选地,对每一场次战斗在各回合制中产生的战斗数据进行处理,将处理结果反馈至相应场次战斗对应的客户端,包括:
对每一场次战斗的任一回合制中战斗单元产生的战斗数据进行分帧计算,其中,每帧计算一个战斗单元产生的战斗数据;
将分帧计算结果以一个战斗单元计算结果为单位反馈至相应场次战斗对应的客户端。
可选地,对每一场次战斗的任一回合制中战斗单元产生的战斗数据进行分帧计算,包括:
针对每一场次战斗的任一回合制分析即将出手战斗单元,将即将出手战斗单元的信息添加至已出手列表;
在一帧中对已出手列表中的即将出手战斗单元出手后产生的战斗数据进行计算。
可选地,针对每一场次战斗的任一回合制分析即将出手战斗单元,包括:
对每一场次战斗包含的多个战斗单元按照属性信息进行排序;
在每一场次战斗的一个回合制中依据战斗单元的排序分析即将出手战斗单元。
可选地,对于每一回合制战斗预设有未出手单元和已出手单元,战斗单元出手之前列入未出手单元,战斗单元出手之后列入已出手单元,在每一场次战斗的一个回合制中依据战斗单元的排序分析即将出手战斗单元,包括:
在每一场次战斗的一个回合制中,按照战斗单元的排序大小查找未出手单元中排序最高的战斗单元作为即将出手战斗单元。
可选地,所述战斗单元的属性信息包括战斗单元的速度属性、攻击力属性中的至少一项。
可选地,在一帧中对已出手列表中的即将出手战斗单元出手后产生的战斗数据进行计算之后,还包括:
若已出手列表中添加完毕同一场次战斗的所有战斗单元的信息,清空所述已出手列表的内容;
对同一场次战斗的下一回合制重新分析即将出手战斗单元,利用重新分析出的即将出手战斗单元的信息重置已出手列表;
对重置后已出手列表中的即将出手战斗单元产生的战斗数据进行分帧计算。
根据本发明实施例的另一方面,还提供了一种回合制战斗数据处理装置,包括:
设置模块,适于为不同场次战斗设置不同位面标识,其中,一场次战斗对应唯一位面标识;
挂载模块,适于将不同位面标识对应的场次战斗的资源封装为不同类对象,将所述不同类对象分别挂载至战斗场景对象,且不同位面标识对应的类对象互相独立;
处理模块,适于对每一场次战斗在各回合制中产生的战斗数据进行处理,将处理结果反馈至相应场次战斗对应的客户端。
根据本发明实施例的再一方面,还提供了一种计算机存储介质,所述计算机存储介质存储有计算机程序代码,当所述计算机程序代码在计算设备上运行时,导致所述计算设备执行上文任意实施例的回合制战斗数据处理方法。
根据本发明实施例的再一方面,还提供了一种计算设备,包括:处理器;存储有计算机程序代码的存储器;当所述计算机程序代码被所述处理器运行时,导致所述计算设备执行上文任意实施例的回合制战斗数据处理方法。
本发明实施例在回合制战斗中,若需要进入新的战斗场景中进行战斗,通过为不同场次战斗设置不同位面标识来对不同场次战斗进行逻辑区分,并将不同位面标识对应的场次战斗的资源封装为不同类对象,且将不同类对象分别挂载至战斗场景对象,使得不同位面标识对应的类对象互相独立,从而实现不同场次战斗的玩家(即战斗单元)在战斗场景中互不可见。本发明实施例无需创建新的战斗场景对象,且战斗中的玩家也无需切换战斗场景,能够减少切换战斗场景带来的数据序列化过程,从而既可以减少大量的服务器内存开销,也可以有效减少服务器的内存回收压力,使服务器能够支持更多的在线玩家和更多场次的战斗。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1示出了根据本发明一实施例的回合制战斗数据处理方法的流程示意图;
图2示出了根据本发明一实施例的不同战斗场次对应于不同位面的示意图;
图3示出了根据本发明一实施例的回合制战斗中战斗单元出手前后的出手单元和未出手单元内容变化的示意图;
图4示出了根据本发明一实施例的回合制战斗数据处理装置的结构示意图;
图5示出了根据本发明另一实施例的回合制战斗数据处理装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
为解决上述技术问题,本发明实施例提供了一种回合制战斗数据处理方法,图1示出了根据本发明一实施例的回合制战斗数据处理方法的流程示意图。参见图1,回合制战斗数据处理方法包括步骤s102至步骤s106。
步骤s102,为不同场次战斗设置不同位面标识,其中,一场次战斗对应唯一位面标识。
步骤s104,将不同位面标识对应的场次战斗的资源封装为不同类对象,将不同类对象分别挂载至战斗场景对象,且不同位面标识对应的类对象互相独立。
步骤s106,对每一场次战斗在各回合制中产生的战斗数据进行处理,将处理结果反馈至相应场次战斗对应的客户端。
本发明实施例在回合制战斗中,若需要在新的战斗场景中进行战斗,通过为不同场次战斗设置不同位面标识来对不同场次战斗进行逻辑区分,并将不同位面标识对应的场次战斗的资源封装为不同类对象,且将不同类对象分别挂载至战斗场景对象,使得不同位面标识对应的类对象互相独立,从而实现不同场次战斗的玩家(即战斗单元)互不可见。本发明实施例无需创建新的战斗场景对象,且战斗中的玩家也无需切换战斗场景,能够减少切换战斗场景带来的数据序列化过程,从而既可以减少大量的服务器内存开销,也可以有效减少服务器的内存回收压力,使服务器能够支持更多的在线玩家和更多场次的战斗。
对于一场战斗会通常预先分配唯一的标识id,不同场次的战斗对应不同的标识id。因此,在本发明一实施例中,执行步骤s102为不同场次战斗设置不同位面标识时,也以直接依据不同场次战斗预先分配的标识id为相应场次战斗设置位面标识,通常位面标识默认可以是0。本发明实施例通过为不同场次战斗设置不同位面标识,实际上是对不同场次战斗进行了逻辑区分,即不同位面标识的不同场次战斗相当于位于不同楼层,且不同楼层中的玩家彼此不可见。
在本发明一实施例中,一场次战斗可以包含多个战斗单元,为不同场次战斗设置不同位面标识时,还需要为同一场次战斗包含的多个战斗单元设置相同的位面标识。本发明实施例的战斗单元fightunits,fu)可以包括玩家、玩家对手、npc(non-playercharacter,非玩家角色)等,例如,一场次战斗中包含了20个战斗单元,分别为五个玩家、五个玩家的五个宠物、十个怪物,这20个战斗单元具有同一位面标识,即位于同一位面。本发明实施例对战斗单元的类型不作具体的限定。
为同一场次战斗中的战斗单元设置位面标识即为多个战斗单元设置同一属性信息,后续战斗过程中,具有相同属性信息的战斗单元是互相可见的,而不同属性信息的战斗单元互不可见,即同一场次战斗的战斗单元互相可见,不同一场次战斗的战斗单元互不可见。
参见上文步骤s104,将不同位面标识对应的场次战斗的资源封装为不同类对象,将不同类对象分别挂载至战斗场景对象,且不同位面标识对应的类对象互相独立。通常一个战斗场景对象上可以挂载多个类对象,每个类对象中可以包含多个战斗单元,因此一个战斗场景上可以挂载多个战斗单元,这里的战斗场景对象相当于一个管理器,可以对多个战斗单元分逻辑管理。
为不同场次战斗分别设置不同位面标识,即将不同场次战斗包含的战斗单元分别切入不同的位面,例如,参见图2,一个战斗场景对象上挂载了n场次战斗的类对象,这里的n可以是大于2的任意正整数。战斗场次1设置有位面标识id1,且位面标识id1对应的战斗单元为玩家1。战斗场次2设置有位面标识id2,且位面标识id2对应的战斗单元为玩家2。战斗场次n设置有位面标识idn,位面标识idn对应的战斗单元为玩家n。此外,战斗场景的非战斗场次也有唯一的位面标识id0,属于独立的非战斗位面,非战斗位面标识id0对应的战斗单元为玩家0。处于不同位面的玩家互相不可见,且不互相影响。
参见上文步骤s106,在本发明一实施例中,对每一场次战斗在各回合制中产生的战斗数据进行处理时,可以先对每一场次战斗的任一回合制中战斗单元产生的战斗数据进行分帧计算,这里的分帧计算指的是服务器每帧计算一个战斗单元产生的战斗数据。然后,将分帧计算结果以一个战斗单元计算结果为单位反馈至相应场次战斗对应的客户端。
将每一回合制的战斗单元产生的战斗数据分帧计算,即一帧只计算一个战斗单元的出手结果,可以减少服务器中cpu瞬间计算压力,避免cpu使用率瞬间飙高,以使服务器能够支持更多场次的战斗同时进行。采用本发明方案通过实际对服务器的压测,对于具有40核、256内存的linux操作系统的服务器,单服可以同时战斗6000多场次,而且服务器没有大的压力。
由于同一场次战斗的战斗单元具有相同的位面标识,且各战斗单元之间互相可见,因此对于同一场次的战斗单元计算结果,可将计算结果广播给该场次战斗的战斗单元(玩家),而其他场次的战斗单元不会收到计算结果。
本发明实施例的服务器将处理结果反馈至相应场次战斗对应的客户端,可以是将战斗单元产生的一个技能的计算结果反馈至相应场次战斗对应的客户端。例如,玩家a用技能s打怪兽b,服务器计算玩家a的技能s对怪兽b的伤害结果,并将玩家a的战斗结果以单个技能s为单位封装消息下发到玩家a的客户端。进而,由玩家a的客户端将收到的消息统一放到播放队列里逐一处理,并将处理结果进行播放。
在本发明一可选实施例中,对每一场次战斗的任一回合制中战斗单元产生的战斗数据进行分帧计算的过程包括步骤一和步骤二。
步骤一、针对每一场次战斗的任一回合制分析即将出手战斗单元,并将即将出手战斗单元的信息添加至已出手列表。例如,分析出的即将出手战斗单元为战斗单元a,则将战斗单元a的信息添加至已出手列表,如将战斗单元a的唯一识别信息添加至已出手列表,对于同一场战斗中的不同战斗单元可以具有唯一的识别信息。
步骤二、在一帧中对已出手列表中的即将出手战斗单元出手后产生的战斗数据进行计算。
服务器在每一帧计算过程中会找一个即将出手战斗单元并加入到已出手列表里,在一帧中对该战斗单元产生的战斗数据计算完毕后跳出此次计算。本发明实施例在战斗单元出手之前先添加至已出手列表,然后再对战斗单元计算出手结果,即使战斗单元出手异常,也会将战斗单元统计为已出手战斗单元,以保证每个战斗单元出手一次且有效完成整个回合制战斗数据的计算。
参见步骤一,在一可选实施例中,针对每一场次战斗的任一回合制分析即将出手战斗单元时,可以先对每一场次战斗包含的多个战斗单元按照属性信息进行排序。然后,在每一场次战斗的一个回合制中依据战斗单元的排序分析即将出手战斗单元。回合制战斗的每一回合制实际战斗之前都有准备阶段,在准备阶段玩家进行技能操作后,可将相应玩家(战斗单元)的属性信息进行存储。因此,可以依据战斗单元的属性信息对战斗单元进行排序。该实施例中,战斗单元的属性信息可以包括战斗单元的速度属性、攻击力属性等,本发明实施例对战斗单元的属性信息不作具体限定。
本发明实施例针对每一回合制战斗可以预设未出手单元和已出手单元,战斗单元出手之前列入未出手单元,战斗单元出手之后列入已出手单元。通过为每一回合制战斗设置未出手单元和已出手单元,可以有效地记录在一个回合制中哪些战斗单元已经出过手,而哪些战斗单元没有出过手。
该实施例在每一场次战斗的一个回合制中依据战斗单元的排序分析即将出手战斗单元的过程中,可以按照战斗单元的排序大小查找未出手单元中排序最高的战斗单元作为即将出手战斗单元。
例如,对于一回合制战斗,依据战斗单元的排序遍历出排序第一的战斗单元a,结合图3中未出手单元和/或已出手单元分析排序第一的战斗单元a未出手,则将战斗单元a作为即将出手战斗单元。当计算完毕战斗单元a的出手结果后,将战斗单元a添加至已出手单元,并将战斗单元a从未出手单元中移除。服务器完成此次计算后,依据战斗单元的排序遍历出排序第一的战斗单元a时,结合图3中未出手单元和/或已出手单元分析排序第一的战斗单元a已出手,然后遍历出排序第二的战斗单元b,且分析排序第二的战斗单元b未出手,将战斗单元b作为即将出手战斗单元。后续分析即将出手战斗单元的方式以此类推。由于查找出的即将出手战斗单元是未出手单元中排序最高的战斗单元,因此可以将未出手单元中排序最高的战斗单元作为即将出手战斗单元。
步骤二中服务器计算战斗数据的一帧相当于服务器的一次心跳,即服务器的一次心跳中处理一个战斗单元的出手结果。在回合制战斗中,所有战斗单元出手一次算一个大回合,通常一场战斗可以有20甚至更多回合。例如,一场次战斗包含10个战斗单元,每个战斗单元均出手一次算一个大回合,服务器一次心跳只计算一个单元出手结果,10次心跳可将整个回合战斗单元的出手结果计算完毕。
在本发明一实施例中,在一帧中对已出手列表中的即将出手战斗单元出手后产生的战斗数据进行计算之后,若分析出已出手列表中添加完毕同一场次战斗的所有战斗单元的信息,则清空已出手列表的内容。从而,对同一场次战斗的下一回合制重新分析即将出手战斗单元,利用重新分析出的即将出手战斗单元的信息重置已出手列表,并对重置后已出手列表中的即将出手战斗单元产生的战斗数据进行分帧计算。即,对于已出手列表,每一回合制开始前都会清空,并进行重置,可以有效避免战斗单元出现如反复出手、出手未成功等异常情况造成服务器计算报错的问题。
基于同一发明构思,本发明实施例还提供了一种回合制战斗数据处理装置,图4示出了根据本发明一实施例的回合制战斗数据处理装置的结构示意图。参见图4,回合制战斗数据处理装置包括设置模块410、挂载模块420和处理模块430。
设置模块410,适于为不同场次战斗设置不同位面标识,其中,一场次战斗对应唯一位面标识。
挂载模块420,适于将不同位面标识对应的场次战斗的资源封装为不同类对象,将不同类对象分别挂载至战斗场景对象,且不同位面标识对应的类对象互相独立。
处理模块430,适于对每一场次战斗在各回合制中产生的战斗数据进行处理,将处理结果反馈至相应场次战斗对应的客户端。
在本发明一实施例中,设置模块410还适于:依据不同场次战斗预先分配的标识id为相应场次战斗设置位面标识。
在本发明一实施例中,一场次战斗包含多个战斗单元,设置模块410还适于:为不同场次战斗设置不同位面标识,且为同一场次战斗包含的多个战斗单元设置相同的位面标识。
在本发明一实施例中,处理模块430还适于:对每一场次战斗的任一回合制中战斗单元产生的战斗数据进行分帧计算,其中,每帧计算一个战斗单元产生的战斗数据;将分帧计算结果以一个战斗单元计算结果为单位反馈至相应场次战斗对应的客户端。
在本发明一实施例中,处理模块430还适于:针对每一场次战斗的任一回合制分析即将出手战斗单元,将即将出手战斗单元的信息添加至已出手列表;在一帧中对已出手列表中的即将出手战斗单元出手后产生的战斗数据进行计算。
在本发明一实施例中,处理模块430还适于:对每一场次战斗包含的多个战斗单元按照属性信息进行排序;在每一场次战斗的一个回合制中依据战斗单元的排序分析即将出手战斗单元。
在本发明一实施例中,对于每一回合制战斗预设有未出手单元和已出手单元,战斗单元出手之前列入未出手单元,战斗单元出手之后列入已出手单元,处理模块430还适于:在每一场次战斗的一个回合制中,按照战斗单元的排序大小查找未出手单元中排序最高的战斗单元作为即将出手战斗单元。
在本发明一实施例中,战斗单元的属性信息包括战斗单元的速度属性、攻击力属性中的至少一项。
基于同一发明构思,本发明实施例还提供了另一种回合制战斗数据处理装置,图5示出了根据本发明一实施例的回合制战斗数据处理装置的结构示意图。参见图5,回合制战斗数据处理装置除了包括设置模块410、挂载模块420和处理模块430,还包括重置模块440。
重置模块440,适于若已出手列表中添加完毕同一场次战斗的所有战斗单元的信息,清空已出手列表的内容;对同一场次战斗的下一回合制重新分析即将出手战斗单元,利用重新分析出的即将出手战斗单元的信息重置已出手列表;对重置后已出手列表中的即将出手战斗单元产生的战斗数据进行分帧计算。
基于同一发明构思,本发明实施例还提供了一种计算机存储介质,计算机存储介质存储有计算机程序代码,当计算机程序代码在计算设备上运行时,导致计算设备执行上文任意实施例中的回合制战斗数据处理方法。
基于同一发明构思,本发明实施例还提供了一种计算设备,包括:处理器;存储有计算机程序代码的存储器;当计算机程序代码被处理器运行时,导致计算设备执行上文任意实施例中的回合制战斗数据处理方法。
所属领域的技术人员可以清楚地了解到,上述描述的系统、装置、模块和单元的具体工作过程,可以参考前述方法实施例中的对应过程,为简洁起见,在此不另赘述。
另外,在本发明各个实施例中的各功能单元可以物理上相互独立,也可以两个或两个以上功能单元集成在一起,还可以全部功能单元都集成在一个处理单元中。上述集成的功能单元既可以采用硬件的形式实现,也可以采用软件或者固件的形式实现。
本领域普通技术人员可以理解:所述集成的功能单元如果以软件的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,其包括若干指令,用以使得一台计算设备(例如个人计算机,服务器,或者网络设备等)在运行所述指令时执行本发明各实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom)、随机存取存储器(ram),磁碟或者光盘等各种可以存储程序代码的介质。
或者,实现前述方法实施例的全部或部分步骤可以通过程序指令相关的硬件(诸如个人计算机,服务器,或者网络设备等的计算设备)来完成,所述程序指令可以存储于一计算机可读取存储介质中,当所述程序指令被计算设备的处理器执行时,所述计算设备执行本发明各实施例所述方法的全部或部分步骤。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:在本发明的精神和原则之内,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案脱离本发明的保护范围。
起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。
此文章来源于网络,如有侵权,请联系删除