实体切换方法及装置、设备、系统、介质与流程
本发明涉及图像技术领域,尤其涉及一种实体切换方法及装置、设备、系统、介质。
背景技术:
实体(entity)是指游戏中的任意元素,如角色、道具。为配合诸如跨地图、进出副本、获取任务等操作,需要在游戏中对实体进行切换。
以从一个游戏地图切换至另一游戏地图的跨地图操作为例,目前的实体切换方案需要在展示给用户的游戏场景中先删除老实体,再创建新实体。由于新实体的渲染过程需要消耗一定时间,因此,触发跨地图操作之后,游戏场景中展示的实体会先消失再出现,导致用户观察到闪烁现象,影响视觉体验。
而且,在展示给用户的游戏场景中实体主要通过实体对应的模型来体现。目前的实体切换过程中,对应于老实体的模型也会切换为对应于新实体的模型。模型的外观受多个诸如位置、运动状态等参数的影响。由于实体切换过程中可能会出现新实体无法继承老实体的全部参数的现象,使得对应于老实体的模型和对应于新实体的模型的外观不一致,动作不连续。举例来说,假设待切换的实体为某一角色,假设实体切换过程中该角色对应的模型正在执行跳跃动作,若实体切换过程中部分运动状态参数丢失,可能会使得该角色对应的模型在游戏场景中刚执行起跳动作就落到地面上。
综上,如何进行实体切换,以避免目前实体切换方案带来的闪烁现象,以及实体切换前后实体对应的模型出现外观不一致、动作不连续的现象,成为亟待解决的技术问题。
技术实现要素:
本发明实施例提供一种实体切换方法及装置、设备、系统、介质,用以提升实体切换流畅度,改善视觉效果。
第一方面,本发明实施例提供一种实体切换方法,该方法包括:
服务端将第一实体序列化为第一实体数据;
创建第二实体,并将第一实体数据反序列化得到的第二实体数据导入第二实体中;
向用户端发送实体切换指令,其中,用户端加载有与服务端实体对应的实体展示模型,实体切换指令用于指示用户端将实体展示模型对应的服务端实体从第一实体切换为第二实体。
在一种可能的实施例中,第一实体与第二实体分别处于不同服务进程中。
服务端将第一实体序列化为第一实体数据之后,还包括:将第一实体数据从第一实体所处的第一服务进程同步至第二服务进程,第二服务进程为第二实体所处的服务进程。
在一种可能的实施例中,第一服务进程与第二服务进程分别处于不同服务端设备中。
将第一实体数据从第一实体所处的第一服务进程同步至第二服务进程,包括:若第一实体为玩家角色,则将第一实体中的玩家组件数据存储至预设数据库;通过远程过程调用将第一实体数据从第一服务进程传输至第二服务进程。
在一种可能的实施例中,服务端将第一实体序列化为第一实体数据,包括:确定第一实体中包括的多个实体组件;将多个实体组件转换为实体数据序列。
创建第二实体,并将第一实体数据反序列化得到的第二实体数据导入第二实体中,包括:创建待配置的实体对象;将实体数据序列还原为多个实体组件;基于多个实体组件对实体对象进行配置得到第二实体。
在一种可能的实施例中,将多个实体组件转换为对应的实体数据序列,包括:从第一实体中解析出多个实体组件及参数;将多个实体组件及参数转换为各自对应的二进制数据集。
将实体数据序列还原为多个实体组件,包括:将二进制数据集解析为多组结构化数据,并将多组结构化数据作为多个实体组件及参数。
基于多个实体组件对实体对象进行配置得到第二实体,包括:将多个实体组件及参数导入到实体对象的数据结构中,以得到第二实体。
在一种可能的实施例中,实体切换指令携带有第二实体的标识。
将实体展示模型对应的服务端实体从第一实体切换为第二实体是指:将实体展示模型对应的服务端实体的标识更新为第二实体的标识。
在一种可能的实施例中,第二实体的运行状态继承自第一实体的运行状态。
将实体展示模型对应的服务端实体从第一实体切换为第二实体的过程中,还包括:保持所述实体展示模型的运行状态对应于所述第一实体的运行状态。
在一种可能的实施例中,向用户端发送实体切换指令后,还包括:
响应于用户端反馈的切换完成指令,删除第一实体数据,并向用户端发送通知消息,通知消息用于指示在服务端中已删除第一实体数据。
第二方面,本发明实施例提供一种实体切换装置,该实体切换装置应用于服务端,该实体切换装置包括:
序列化模块,用于将第一实体序列化为第一实体数据;
创建模块,用于创建第二实体,并将第一实体数据反序列化得到的第二实体数据导入第二实体中;
通知模块,用于向用户端发送实体切换指令,其中,用户端加载有与服务端实体对应的实体展示模型,实体切换指令用于指示用户端将实体展示模型对应的服务端实体从第一实体切换为第二实体。
在一种可能的实施例中,服务端包括所述第一实体所处的第一服务进程与所述第二实体所处的第二服务进程。
所述实体切换装置还包括同步模块。所述同步模块具体用于:服务端将第一实体序列化为第一实体数据之后,将第一实体数据从第一实体所处的第一服务进程同步至第二服务进程,第二服务进程为第二实体所处的服务进程。将第一实体数据反序列化得到的第二实体数据导入第二实体中之后,在第一服务进程中删除第一实体数据。
在一种可能的实施例中,第一服务进程与第二服务进程分别处于不同服务端设备中。
同步模块将第一实体数据从第一实体所处的第一服务进程同步至第二服务进程时,具体用于:若第一实体为玩家角色,则将第一实体中的玩家组件数据存储至预设数据库;通过远程过程调用将第一实体数据从第一服务进程传输至第二服务进程。
同步模块在第一服务进程中删除第一实体数据时,具体用于:向第一服务进程发送实体删除指令,实体删除指令用于指示第一服务进程删除第一实体数据。
在一种可能的实施例中,所述序列化模块具体用于:确定所述第一实体中包括的多个实体组件;将所述多个实体组件转换为实体数据序列。
所述创建模块具体用于:创建待配置的实体对象;将所述实体数据序列还原为所述多个实体组件;基于所述多个实体组件对所述实体对象进行配置得到所述第二实体。
在一种可能的实施例中,所述序列化模块将所述多个实体组件转换为对应的实体数据序列时,具体用于:从所述第一实体中解析出所述多个实体组件及参数;将所述多个实体组件及所述参数转换为各自对应的二进制数据集。
所述创建模块将所述实体数据序列还原为所述多个实体组件时,具体用于:将所述二进制数据集解析为多组结构化数据,并将所述多组结构化数据作为所述多个实体组件及所述参数。
所述创建模块基于所述多个实体组件对所述实体对象进行配置得到所述第二实体时,具体用于:将所述多个实体组件及所述参数导入到所述实体对象的数据结构中,以得到所述第二实体。
在一种可能的实施例中,所述实体切换指令携带有所述第二实体的标识。
将所述实体展示模型对应的服务端实体从所述第一实体切换为所述第二实体是指:将所述实体展示模型对应的服务端实体的标识更新为所述第二实体的标识。
在一种可能的实施例中,所述第二实体的运行状态继承自所述第一实体的运行状态;将所述实体展示模型对应的服务端实体从所述第一实体切换为所述第二实体,还包括:保持所述实体展示模型的运行状态对应于所述第一实体的运行状态。
在一种可能的实施例中,所述实体切换装置还包括删除模块,具体用于:
在所述通知模块向用户端发送实体切换指令后,响应于用户端反馈的切换完成指令,删除所述第一实体数据,并通过所述通知模块向所述用户端发送通知消息,所述通知消息用于指示在所述服务端中已删除所述第一实体数据。
第三方面,本发明实施例提供一种电子设备,其中包括处理器和存储器,其中,所述存储器上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器至少可以实现上面描述的实体切换方法。
本发明实施例又提供了一种系统,包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由所述处理器加载并执行以实现上面描述的实体切换方法。
本发明实施例提供了一种计算机可读介质,其上存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上面描述的实体切换方法。
在本发明实施例中,服务端将第一实体序列化为第一实体数据,创建第二实体,并由第一实体数据反序列化得到的第二实体数据导入第二实体中,从而,通过序列化和反序列化过程将第一实体的所有参数完整传递给第二实体,避免服务端在实体切换过程中出现参数继承不完整的现象,保证了参数继承的完整性。在参数继承完整性的基础上,针对于用户端中加载的与服务端实体对应的实体展示模型,服务端还会向用户端发送实体切换指令,该实体切换指令用于指示该用户端将实体展示模型对应的服务端实体从第一实体切换为第二实体,从而,用户端通过改变实体展示模型与服务端实体的对应关系,实现了用户无感知的实体切换过程。对于用户端而言,不仅无需创建并渲染新实体避免了闪烁现象,简化实体切换过程,提升实体切换效率;而且,由于切换后的服务端实体继承了切换前实体的所有参数,使得对应于服务端实体的实体展示模型能够呈现出前后一致的外观及具有连续性的动作,大大提升实体切换流畅度,改善视觉体验。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的一种实体切换场景的结构示意图;
图2为本发明一实施例提供的一种实体切换方法的流程图;
图3为本发明一实施例提供的一种实体切换过程的原理示意图;
图4为本发明一实施例提供的另一种实体切换过程的原理示意图;
图5为本发明实施例提供的一种实体切换装置的结构示意图;
图6为与图5所示实施例提供的实体切换装置对应的电子设备的结构示意图。
具体实施方式
现在将参照若干示例性实施例来论述本发明的内容。应当理解,论述了这些实施例仅是为了使得本领域普通技术人员能够更好地理解且因此实现本发明的内容,而不是暗示对本发明的范围的任何限制。
如本文中所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”。术语“一个实施例”和“一种实施例”要被解读为“至少一个实施例”。术语“另一个实施例”要被解读为“至少一个其他实施例”。
另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
本发明实施例提供的实体切换方案适用于各种实体。各种实体比如是游戏中的角色、道具。对于任一实体而言,需要在服务端和用户端上运行与该实体相关的逻辑。服务端主要用于控制实体的功能逻辑,用户端主要用于控制诸如实体的动作特效等表现逻辑。服务端与用户端运行的逻辑相互独立。
实际上,实体创建过程可以是:服务端先创建实体,进而,由服务端触发用户端创建需要呈现的实体展示模型(也可称为模型)以及相应视觉效果。
图1为本发明实施例提供的一种实体切换场景的示意图,如图1所示,该实体切换场景包括:服务端及用户端。可选地,服务端中运行有至少一个服务进程。
在图1中,假设用户端包括设备a和设备b。实际上,用户端可以是诸如智能手机、平板电脑、pc机、笔记本电脑等终端设备。可选地,服务端可以部署在云平台上。
实际上,用户端可以是诸如智能手机、平板电脑、pc机、笔记本电脑等设备。服务端可以实现为:业务实例、虚拟机、硬件设备。比如,该服务端可以实现为部署在云平台的一个或多个设备上的一种业务实例。简单来说,该服务端可以理解为是部署在云平台上的一种软件,用于执行实体切换流程。或者,该服务端也可以实现为部署在云平台的一个或多个设备上的一种虚拟机。该虚拟机中安装有用于执行实体切换流程的应用软件。或者,该服务端还可以实现为在组成云平台的众多硬件设备中,设置一个或多个硬件设备用于执行实体切换流程。
实际上,本发明实施例提供的实体切换方案适用于各种实体的切换场景,比如跨地图场景、进入/离开副本场景、进出位面场景以及任务接取场景。
下面具体说明本发明实施例提供的现有实体切换方案存在的技术问题:
现有实体切换方案中,触发实体切换操作之后,需要在用户端展示的游戏场景中先删除老实体,再创建新实体。由于新实体的渲染过程需要消耗一定时间,因而,用户端展示的游戏场景中实体会先消失再出现,导致用户能够观察到实体发生的闪烁现象,影响视觉体验。由于实体切换过程中新实体可能会没有继承到老实体的全部参数,使得对应于新实体的模型与对应于老实体的模型出现外观不一致、动作不连续的现象。
综上,如何进行实体切换,以避免目前实体切换方案带来的闪烁现象以及切换前后模型外观不一致、动作不连续的现象,成为亟待解决的技术问题。
为了解决上述问题,本发明实施例提供的实体切换方案的核心思想是:
服务端首先将第一实体序列化为第一实体数据,以便向新建的实体传递第一实体中包括的各种参数。然后,服务端创建第二实体,并将第一实体数据反序列化得到的第二实体数据导入第二实体中,从而,通过序列化和反序列化过程将第一实体的所有参数完整传递给第二实体,避免服务端在实体切换过程中出现参数继承不完整的现象,保证了参数继承的完整性。在服务端参数继承完整性的基础上,针对于用户端中加载的与服务端实体对应的实体展示模型,服务端还会向用户端发送实体切换指令,该实体切换指令用于指示该用户端将实体展示模型对应的服务端实体从第一实体切换为第二实体,从而,用户端通过改变实体展示模型与服务端实体的对应关系,使用户端中的实体展示模型对应于切换后的服务端实体,在用户端中实现用户无感知的实体切换过程。对于用户端而言,不仅无需创建并渲染新实体,避免了因用户端中删除老实体、创建新实体而造成的闪烁现象,而且由于切换后的服务端实体继承了切换前实体的所有参数,使得对应于服务端实体的实体展示模型能够呈现出前后一致的外观及具有连续性的动作,大大提升实体切换流畅度,改善视觉体验。
在介绍了实体切换方案的基本思路之后,下面具体介绍本发明的各种非限制性实施例。
下面结合以下实施例对该实体切换方法的执行过程进行说明。
图2为本发明实施例提供的一种实体切换方法的流程图。如图2所示,该实体切换方法包括如下步骤:
201、将第一实体序列化为第一实体数据;
202、创建第二实体,并将第一实体数据反序列化得到的第二实体数据导入第二实体中;
203、向用户端发送实体切换指令,该实体切换指令用于指示用户端将实体展示模型对应的服务端实体从第一实体切换为第二实体。
本发明实施例中的实体切换方法应用于服务端,该服务端加载有至少一个实体。为区分,本文中将服务端加载的所有实体统称为服务端实体,将待切换的服务端实体称为第一实体。
用户端加载有与服务端实体对应的实体展示模型。可选地,可以预先建立服务端实体与实体展示模型的对应关系。
实际应用中,以第一实体为例,实体创建过程可以是:服务端先创建第一实体,进而,服务端向用户端发送该第一实体的相关数据,如第一实体在服务端中的实体编号,以触发用户端基于相关数据创建与该第一实体对应的实体展示模型,并渲染与该实体展示模型相应的视觉效果。
图3为与图2示出的一种实体切换方法对应的交互流程。为便于描述,下面结合图3示出的服务端和用户端的交互流程,详细说明本发明实施例提供的实体切换方法的具体执行过程:
301、发起实体切换流程。
实际应用中,实体切换流程可以是服务端发起的,也可以是由用户端发起的。实体切换的发起条件包括但不限于:跨地图操作、进出副本操作、进出位面操作、获取任务操作。
在一可选实施例中,响应于用户端反馈的某一动作指令,服务端确定待切换的第一实体,并发起第一实体的切换流程。
举例来说,假设服务端为游戏服务器,用户端为游戏客户端。假设某一动作指令为任务接取指令,若用户控制的游戏实体触发某一任务,并确定接受该任务,此情况可视为达到指令触发条件,继而触发游戏客户端向游戏服务器反馈该任务对应的任务接取指令。游戏服务器接收该任务接取指令,并基于该任务接取指令确定待切换的第一实体,并发起第一实体的切换流程。
或者,另一可选实施例中,通过在服务端中设置控制项来发起实体切换流程。如用户选中该控制项时,发起实体切换流程。
302、服务端将第一实体序列化为第一实体数据。
为了保证实体切换前后的数据一致性,即切换后的服务器实体能够完整继承切换前服务器实体的所有数据,302中,服务端需要将第一实体序列化为第一实体数据。
其中,第一实体包括多个实体组件。以第一实体为游戏中的实体来说,多个实体组件包括但不限于:玩家组件、npc组件、移动组件、背包组件、灵兽组件、装备组件、技能组件、状态组件。这些实体组件实质上都是用于配置第一实体的结构化数据。可选地,第一实体数据实际上是非结构化数据,比如二进制数据。非结构化数据更便于数据传输,有利于减少数据丢失现象。
具体来说,将第一实体序列化为第一实体数据,可以实现为:确定第一实体中包括的多个实体组件;将多个实体组件转换为实体数据序列。
具体而言,将多个实体组件转换为实体数据序列,具体实现为:服务端从第一实体中解析出多个实体组件及参数;将多个实体组件及参数转换为各自对应的二进制数据集。
实际上,服务端从第一实体中解析出多组结构化数据,这多组结构化数据即多个实体组件及参数。参数包括但不限于模型的位置信息、运动状态、方向信息、道具信息、角色状态信息。角色状态信息比如是角色的血量信息,道具信息比如是背包中的货币数量、道具类型、道具数量。从而,将多个实体组件逐一转换为各自对应的二进制数据集,并将参数存储至对应实体组件的二进制数据集中。
实际应用中,实体数据序列可以实现为二进制字节流。通过将多个实体逐一转换为各自对应的实体数据序列,有助于减少实体切换过程中的数据丢失现象,保证实体切换前后的数据一致性。
可选地,将第一实体序列化之前,还可以从第一实体中选取预设类型数据,比如玩家组件数据,将选取出的预设类型数据传输至数据库,以进一步防止后续实体切换过程中的数据丢失现象。
303、服务端创建第二实体,并将第一实体数据反序列化得到的第二实体数据导入第二实体中。
仍以上文的实体数据序列为例,将第一实体数据反序列化得到第二实体数据,并基于第二实体数据生成第二实体,可以实现为:
创建待配置的实体对象;将实体数据序列还原为多个实体组件;基于多个实体组件对实体对象进行配置得到第二实体。
具体而言,服务端将第一实体数据解析为多组结构化数据,这多组结构化数据即还原出的多个实体组件及参数。此处的多个实体组件与上文步骤302中的多个实体组件一致。进而,服务端将多个实体组件及参数导入到实体对象的数据结构中以得到第二实体。简单来说,就是服务端将上述多个实体组件添加至待配置的实体对象中,并基于上述参数对待配置的实体对象中添加的实体组件进行设置得到第二实体。假设实体对象为某一角色,则待配置的实体对象中添加的实体组件需要设置的参数包括但不限于:方向信息、位置信息、角色的血量信息及背包中的道具信息、货币数量。
304、服务端向用户端发送实体切换指令。
305、用户端将实体展示模型对应的服务端实体从第一实体切换为第二实体。
为在用户端中实现实体切换,生成第二实体之后,服务端还需要向用户端发送实体切换指令。其中,实体切换指令用于指示用户端将实体展示模型对应的服务端实体从第一实体切换为第二实体。可选地,实体切换指令携带有第二实体的标识。
用户端接收实体切换指令后,将实体展示模型对应的服务端实体从第一实体切换为第二实体。
可选地,将实体展示模型对应的服务端实体从第一实体切换为第二实体是指:将实体展示模型对应的服务端实体的标识更新为第二实体的标识。
举例来说,假设服务端实体的标识为服务端存储的实体编号。假设第一实体的实体编号为0001,第二实体的实体编号为0010。基于此,用户端接收实体切换指令后,从实体切换指令中解析出第二实体的实体编号即0010,从而将实体展示模型对应的服务端实体的实体编号从0001更新为0010。
实质上,步骤304和步骤305的目的是:在服务端参数继承完整性的基础上,通过改变实体展示模型与服务端实体的对应关系,使用户端中的实体展示模型对应于切换后的服务端实体,从而在用户端中实现用户无感知的实体切换过程。可以理解的是,由于用户端中无需创建并渲染新实体,因而能够有效避免因用户端中删除老实体、创建新实体而造成的闪烁现象。并且,切换后的服务端实体继承了切换前实体的所有参数,使得对应于切换后的服务端实体的实体展示模型能够呈现出前后一致的外观及具有连续性的动作。
这里的“用户无感知”中,用户不仅限于用户端的使用者。实质上,用户是指能查看到用户端的所有相关人员。这里的“用户无感知”可以理解为:用户不会从用户端展示的三维场景中体会到实体切换带来的不流畅现象,如闪烁现象、模型外观前后不一致、动作不连续等。
在服务端参数继承完整性的基础上,还需要注意的是,第二实体的运行状态继承自第一实体的运行状态。将实体展示模型对应的服务端实体从第一实体切换为第二实体的过程中,用户端还会保持实体展示模型的运行状态对应于第一实体的运行状态。简单来说,就是第二实体中包括第一实体的所有参数,使得实体切换过程中实体展示模型对应的服务端实体的所有参数并未改变,这样,可以使得实体展示模型的运行状态保持为实体切换前该实体展示模型与第一实体对应时所呈现的运行状态。
306、用户端向服务端反馈切换完成指令。
307、服务端响应于用户端反馈的切换完成指令,删除第一实体数据,并向用户端发送通知消息。
最终,用户端向服务端反馈切换完成指令,服务端接收用户端反馈的切换完成指令,该切换完成指令用于指示用户端已将实体展示模型对应的服务端实体从第一实体切换为第二实体,即用户端已完成实体切换。
服务端响应于该切换完成指令,删除第一实体数据,并向用户端发送通知消息,该通知消息用于指示在服务端中已删除第一实体数据。
实际上,除了上述第一实体数据外,服务端还可以删除与第一实体相关的其他数据,如第一实体对应的实体逻辑、运行日志等。
通过上述步骤301至307可以提升在服务端和用户端中实体切换的流畅度。
图4为与图2示出的另一种实体切换方法对应的交互流程。假设交互流程中第一实体与第二实体分别处于不同服务进程中。参见图4,该交互流程包括以下步骤:
401、发起实体切换流程。
实际应用中,实体切换流程可以是由服务端发起的,也可以是由用户端发起的。
402、服务端将第一实体序列化为第一实体数据。
其中,第一实体包括多个实体组件。这里,多个实体组件可以理解为用于配置第一实体的多组结构化数据。第一实体数据可以理解为非结构化数据,比如二进制数据。
可选地,为了保证实体切换前后的数据一致性,便于后续数据传输,需要将多个实体组件逐一转换为实体数据序列。非结构化数据更便于数据传输,有利于减少数据丢失现象。
403、服务端将第一实体数据从第一实体所处的第一服务进程同步至第二服务进程。
404、服务端在第二服务进程中创建第二实体,并将第一实体数据反序列化得到的第二实体数据导入第二实体中。
其中,第二实体所处的服务进程称为第二服务进程。第一实体与第二实体分别处于不同服务进程中。可以理解的,不同服务进程可处于同一服务端设备中,也可以各自处于不同服务端设备中。
具体地,假设第一服务进程与所述第二服务进程分别处于不同服务端设备中,403中,若第一实体为玩家角色,则服务端将第一实体中的玩家组件数据存储至预设数据库,防止玩家组件数据丢失。进而,服务端通过远程过程调用(remoteprocedurecall,rpc)将第一实体数据从第一服务进程传输至第二服务进程。具体来说,服务端通过rpc框架在第一服务进程中封装第一实体数据,响应于第二服务进程的调用请求,将封装后的第一实体数据传输至第二服务进程中。其中,通过rpc框架传输第一实体数据的方法可以通过调用函数或传参来实现。
可选地,404中所将第一实体数据反序列化得到的第二实体数据导入第二实体中之后,服务端在第一服务进程中删除第一实体数据。实际应用中,服务端向第一服务进程发送实体删除指令,该实体删除指令用于指示在第一服务进程中删除第一实体数据。
实际上,序列化、rpc和反序列化过程常常是结合实现的。
比如,跨服务端设备的实体切换场景中,就会将序列化、rpc和反序列化过程结合实现。跨服务端设备的实体切换场景比如是跨地图场景、进出副本场景。
具体而言,假设第一服务进程和第二服务进程分别处于不同服务端设备中,第一服务进程收到第二服务进程的调用请求后,第一服务进程基于rpc框架对调用请求进行反序列化,获得调用信息。第一服务进程基于调用信息定位到第一实体,并通过rpc框架序列化第一实体,得到序列化的二进制字节流即第一实体数据。可选地,若第一实体为玩家角色,还会将第一实体中的玩家组件数据备份至预设数据库。第一服务进程通过网络传输将序列化的第一实体数据反馈给第二服务进程。最终,收到第一实体数据后,第二服务进程创建待配置的实体对象,解析第一实体数据,重构出多个实体组件及参数(即第二实体数据),将多个实体组件及参数赋值到实体对象中,输出第二实体,从而创建出与第一实体完全一致的实体对象(即第二实体)。最后,第二服务进程通知第一服务进程删除第一实体数据。
405、服务端向用户端发送实体切换指令。
406、用户端将实体展示模型对应的服务端实体从第一实体切换为第二实体。
为在用户端中实现实体切换,服务端还需要向用户端发送实体切换指令,该实体切换指令携带有第二实体的标识。用户端接收实体切换指令后,将实体展示模型对应的服务端实体的标识从第一实体的标识更新为第二实体的标识。
407、用户端向服务端反馈切换完成指令。
408、服务端响应于用户端反馈的切换完成指令,删除第一实体数据,并向用户端发送通知消息。
最终,用户端向服务端反馈切换完成指令,服务端接收用户端反馈的切换完成指令,该切换完成指令用于指示用户端已将实体展示模型对应的服务端实体从第一实体切换为第二实体,即用户端已完成实体切换。
服务端响应于该切换完成指令,删除第一实体数据,并向用户端发送通知消息,该通知消息用于指示在服务端中已删除第一实体数据。该切换完成指令也用于指示用户端已完成实体切换。
通过上述步骤401至408可以提升在服务端和用户端中实体切换的流畅度。
需要说明的是,图4示出的交互流程与图3示出的该交互流程的步骤类似,即步骤401至402与步骤301至302类似,步骤404至408与步骤303至307类似,相似之处相互参见,此处不再赘述。
图2示出的实体切换方法的执行过程中,服务端通过序列化和反序列化过程将第一实体的所有参数完整传递给第二实体,避免服务端在实体切换过程中出现参数继承不完整的现象,保证了参数继承的完整性。在参数继承完整性的基础上,针对于用户端中加载的与服务端实体对应的实体展示模型,服务端还会向用户端发送实体切换指令,使得用户端通过改变实体展示模型与服务端实体的对应关系,实现了用户无感知的实体切换过程。对于用户端而言,不仅无需创建并渲染新实体,避免了闪烁现象,简化实体切换过程,提高实体切换效率;而且,由于切换后的服务端实体继承了切换前实体的所有参数,使得对应于服务端实体的实体展示模型能够呈现出前后一致的外观及具有连续性的动作,大大提升实体切换流畅度,改善视觉体验。
此外,为避免用户观察到诸如模型外观前后不一致、动作不连续等现象,目前,游戏制作过程中常常在实体切换流程中将用户端设置为黑屏,大大降低了游戏过程流畅度。基于上述实施例示出的实体切换方法,游戏制作过程中也无需为因规避传统实体切换流程带来的闪烁现象而增加降低游戏过程流畅度的设计。
以下将详细描述本发明的一个或多个实施例的实体切换装置。本领域技术人员可以理解,这些实体切换装置均可使用市售的硬件组件通过本方案所教导的步骤进行配置来构成。
图5为本发明实施例提供的一种实体切换装置的结构示意图。该实体切换装置应用于服务端,如图5所示,该实体切换装置包括:序列化模块11、创建模块12、通知模块13。
序列化模块11,用于将第一实体序列化为第一实体数据;
创建模块12,用于创建第二实体,并将所述第一实体数据反序列化得到的第二实体数据导入所述第二实体中;
通知模块13,用于向用户端发送实体切换指令,其中,所述用户端加载有与服务端实体对应的实体展示模型,所述实体切换指令用于指示所述用户端将所述实体展示模型对应的服务端实体从所述第一实体切换为所述第二实体。
可选地,服务端包括所述第一实体所处的第一服务进程与所述第二实体所处的第二服务进程。
实体切换装置还包括同步模块。所述同步模块具体用于:服务端将第一实体序列化为第一实体数据之后,将第一实体数据从第一实体所处的第一服务进程同步至第二服务进程,第二服务进程为第二实体所处的服务进程。将第一实体数据反序列化得到的第二实体数据导入第二实体中之后,在第一服务进程中删除第一实体数据。
可选地,第一服务进程与第二服务进程分别处于不同服务端设备中。
所述同步模块将第一实体数据从第一实体所处的第一服务进程同步至第二服务进程时,具体用于:若第一实体为玩家角色,则将第一实体中的玩家组件数据存储至预设数据库;通过远程过程调用将第一实体数据从第一服务进程传输至第二服务进程。
所述同步模块在第一服务进程中删除第一实体数据时,具体用于:向第一服务进程发送实体删除指令,实体删除指令用于指示第一服务进程删除第一实体数据。
可选地,所述序列化模块11具体用于:确定所述第一实体中包括的多个实体组件;将所述多个实体组件转换为实体数据序列。
所述创建模块12具体用于:创建待配置的实体对象;将所述实体数据序列还原为所述多个实体组件;基于所述多个实体组件对所述实体对象进行配置得到所述第二实体。
可选地,所述序列化模块11将所述多个实体组件转换为对应的实体数据序列时,具体用于:从所述第一实体中解析出所述多个实体组件及参数;将所述多个实体组件及所述参数转换为各自对应的二进制数据集。
所述创建模块12将所述实体数据序列还原为所述多个实体组件时,具体用于:将所述二进制数据集解析为多组结构化数据,并将所述多组结构化数据作为所述多个实体组件及所述参数。
所述创建模块12基于所述多个实体组件对所述实体对象进行配置得到所述第二实体时,具体用于:将所述多个实体组件及所述参数导入到所述实体对象的数据结构中,以得到所述第二实体。
可选地,所述实体切换指令携带有所述第二实体的标识。
将所述实体展示模型对应的服务端实体从所述第一实体切换为所述第二实体是指:将所述实体展示模型对应的服务端实体的标识更新为所述第二实体的标识。
可选地,所述第二实体的运行状态继承自所述第一实体的运行状态。将所述实体展示模型对应的服务端实体从所述第一实体切换为所述第二实体,还包括:保持所述实体展示模型的运行状态对应于所述第一实体的运行状态。
可选地,所述实体切换装置还包括删除模块,具体用于:
在所述通知模块13向用户端发送实体切换指令后,响应于用户端反馈的切换完成指令,删除所述第一实体数据,并通过所述通知模块13向所述用户端发送通知消息,所述通知消息用于指示在所述服务端中已删除所述第一实体数据。
图5所示实体切换装置可以执行前述各实施例中提供的方法,本实施例未详细描述的部分,可参考前述实施例的相关说明,在此不再赘述。
在一个可能的设计中,上述图5所示的实体切换装置的结构可实现为一电子设备。
如图6所示,该电子设备可以包括:处理器21、存储器22。其中,所述存储器22上存储有可执行代码,当所述可执行代码被所述处理器21执行时,至少使所述处理器21可以实现如前述实施例中提供的实体切换方法。其中,该电子设备的结构中还可以包括通信接口23,用于与其他设备或通信网络通信。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的各个模块可以是或者也可以不是物理上分开的。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
根据需要,本发明各实施例的系统、方法和装置可以实现为纯粹的软件(例如用java来编写的软件程序),也可以根据需要实现为纯粹的硬件(例如专用asic芯片或fpga芯片),还可以实现为结合了软件和硬件的系统(例如存储有固定代码的固件系统或者带有通用存储器和处理器的系统)。
本发明的另一个方面是一种计算机可读介质,其上存储有计算机可读指令,所述指令被执行时可实施本发明各实施例的实体切换方法。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所公开的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。要求保护的主题的范围仅由所附的权利要求进行限定。
起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。
此文章来源于网络,如有侵权,请联系删除