游戏中虚拟载具的状态同步方法和装置与流程

文档序号:21182993发布日期:2020-06-20 17:55阅读:246来源:国知局
游戏中虚拟载具的状态同步方法和装置与流程

本申请涉及游戏场景应用技术领域,尤其是涉及一种游戏中虚拟载具的状态同步方法和装置。



背景技术:

随着游戏技术与游戏品质的提升,载具系统成为众多网络游戏不可或缺的一部分。普通大型多人在线(massivemultiplayeronline,mmo)网络游戏中的角色同步分为状态同步与帧同步。而载具同步与角色同步有所不同,物理载具除了需要角色同步涉及到的同步位置、方向以外,还会涉及到多个载具碰撞时的姿态一致性问题。

由于载具物理模拟性能消耗较大,因此大部分网络游戏都将物理载具放在客户端进行模拟,并将模拟结果上传至服务器,而服务器只负责转发各个客户端上传的快照信息。但是由于不同客户端与服务器之间的通信延迟时间可能不同,在载具互相碰撞时各自的客户端物理模拟结果不一致,导致物理碰撞后多个客户端中载具同步出现姿态不一致的问题。



技术实现要素:

本发明的目的在于提供一种游戏中虚拟载具的状态同步方法和装置,以解决各个游戏客户端中的载具同步出现姿态不一致的技术问题。

第一方面,本申请实施例提供一种游戏中虚拟载具的状态同步方法,应用于游戏客户端,所述方法包括:

在所述虚拟载具由客户端控制的期间内,向服务器同步所述虚拟载具的第一状态信息,所述第一状态信息用于所述服务器针对所述虚拟载具进行碰撞预测计算;

响应于所述服务器在预测到所述虚拟载具将发生碰撞时发送的第一切换指令,将所述虚拟载具切换为由所述服务器控制,并接收所述服务器发送的在由所述服务器控制的期间内所述虚拟载具的第二状态信息。

在一个可选的实现中,在向服务器同步所述虚拟载具的第一状态信息的步骤之前,还包括:

在所述虚拟载具由客户端控制的期间内,根据针对所述虚拟载具的第一操作指令,确定所述虚拟载具的第一状态信息。

在一个可选的实现中,根据针对所述虚拟载具的第一操作指令,确定所述虚拟载具的第一状态信息的步骤,包括:

根据针对所述虚拟载具的第一操作指令,基于所述虚拟载具的创建一第一模拟载具,模拟得到所述第一模拟载具的当前状态;

基于所述第一模拟载具的当前状态确定所述虚拟载具的第一状态信息,所述虚拟载具的第一状态信息平滑趋近于所述第一模拟载具的当前状态。

在一个可选的实现中,在接收所述服务器发送的在由所述服务器控制的期间内所述虚拟载具的第二状态信息的步骤之前,所述方法还包括:

在所述虚拟载具由服务器控制的期间内,将所述第一操作指令同步到所述服务器,以使所述服务器基于所述第一操作指令,确定所述虚拟载具的第二状态信息。

在一个可选的实现中,在接收所述服务器发送的在由所述服务器控制的期间内所述虚拟载具的第二状态信息的步骤之前,所述方法还包括:

在所述虚拟载具由服务器控制的期间内,确定针对所述虚拟载具的第二操作指令;

将所述第二操作指令同步到所述服务器,以使所述服务器基于所述第二操作指令,确定所述虚拟载具的第三状态信息。

在一个可选的实现中,所述针对所述虚拟载具的第二状态信息为所述虚拟载具的第二模拟载具的当前状态;在接收所述服务器发送的在由所述服务器控制的期间内所述虚拟载具的第二状态信息的步骤之后,包括:

基于所述第二模拟载具的第二状态信息确定所述虚拟载具的当前状态,所述虚拟载具的当前状态平滑趋近于所述第二模拟载具的当前状态。

第二方面,实施例提供一种游戏中虚拟载具的状态同步方法,应用于服务器,所述方法包括:

在所述虚拟载具由客户端控制的期间内,同步所述虚拟载具的第一状态信息;

基于所述虚拟载具的第一状态信息针对所述虚拟载具进行碰撞预测;

当预测到所述虚拟载具将发生碰撞时,发送第一控制权切换指令至所述客户端,将所述虚拟载具切换为由所述服务器控制,并向所述客户端同步在所述服务器控制的期间内所述虚拟载具的第二状态信息。

在一个可选的实现中,基于所述虚拟载具的第一状态信息针对所述虚拟载具进行碰撞预测的步骤,包括:

基于所述虚拟载具的当前状态和物理参数建立所述虚拟载具的方向包围盒;

通过所述虚拟载具的方向包围盒来进行碰撞检测。

在一个可选的实施例中,所述当前状态包括载具位置、载具速度、载具前向方向矢量、载具右向方向矢量和载具预计移动时长,所述物理参数包括载具长度、载具宽度和载具宽度附加值。

在一个可选的实现中,所述通过所述虚拟载具来进行碰撞检测,包括:

若至少两个所述虚拟载具的方向包围盒在所有坐标轴的投影都重叠,则判定所述虚拟载具会发生碰撞;

若至少两个所述虚拟载具的方向包围盒在所有坐标轴的投影并非都重叠,则判定所述虚拟载具不会发生碰撞。

在一个可选的实现中,在通过所述虚拟载具的方向包围盒来进行碰撞检测的步骤之前,还包括:

通过所述虚拟载具的中心点与待碰撞虚拟载具的中心点的垂直距离和水平距离分别进行高度检测和范围检测;

当所述垂直距离小于预设高度距离阈值,且所述水平距离小于所述虚拟载具与所述待碰撞虚拟载具的长度之和时,再执行通过所述虚拟载具的方向包围盒来进行碰撞检测的步骤。

在一个可选的实现中,向所述客户端同步在所述服务器控制的期间内所述虚拟载具的第二状态信息的步骤之前,还包括:

在所述虚拟载具由服务器控制的期间内,根据针对所述虚拟载具的第一操作指令,确定所述虚拟载具的第二状态信息。

第三方面,实施例提供一种游戏中虚拟载具的状态同步装置,应用于游戏客户端,所述装置包括:

第一状态确定模块,用于在所述虚拟载具由客户端控制的期间内,向服务器同步所述虚拟载具的第一状态信息,所述第一状态信息用于所述服务器针对所述虚拟载具进行碰撞预测计算;

第一同步模块,用于响应于所述服务器在预测到所述虚拟载具将发生碰撞时发送的第一切换指令,将所述虚拟载具切换为由所述服务器控制,并接收所述服务器发送的在由所述服务器控制的期间内所述虚拟载具的第二状态信息。

第四方面,实施例提供一种游戏中虚拟载具的状态同步装置,应用于服务器,所述装置包括:

第二同步模块,用于在所述虚拟载具由客户端控制的期间内,同步所述虚拟载具的第一状态信息;

预测模块,用于基于所述虚拟载具的第一状态信息针对所述虚拟载具进行碰撞预测;

第二状态确定模块,用于当预测到所述虚拟载具将发生碰撞时,发送第一控制权切换指令至所述客户端,将所述虚拟载具切换为由所述服务器控制,并向所述客户端同步在所述服务器控制的期间内所述虚拟载具的第二状态信息。

第五方面,实施例提供一种终端,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述前述实施方式任一项所述的方法的步骤。

第六方面,实施例提供一种服务器,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述前述实施方式任一项所述的方法的步骤。

第七方面,实施例提供一种机器可读存储介质,所述机器可读存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现前述实施方式任一项所述的方法的步骤。

本发明实施例提供了一种游戏中虚拟载具的状态同步方法和装置,可通过切换客户端和服务器的载具控制权,来实现各个客户端的载具碰撞姿态同步的目的。其中,当载具控制权在客户端时,此时不会发生载具碰撞,由客户端确定虚拟载具的第一状态信息,并同步至服务器,以使服务器同步至当前游戏场景中的其他客户端,以减少操作延迟,并降低服务器运行负载。当预测到载具即将碰撞时,将控制权交给服务器,由服务器产生虚拟载具的第二状态信息,并同步至当前游戏场景中的各个客户端,解决了载具碰撞同步后姿态不一致的问题。

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

附图说明

图1为本申请实施例提供的应用场景示意图;

图2为本申请实施例提供的手机的结构示意图;

图3为本申请实施例提供的服务器的结构示意图;

图4为本申请实施例提供的游戏中虚拟载具的状态同步方法的流程示意图之一;

图5为本申请实施例提供的游戏中虚拟载具的状态同步方法的流程示意图之二;

图6为本申请实施例提供的方向包围盒的投影示意图;

图7为本申请实施例提供的游戏中虚拟载具的状态同步方法的流程示意图之三;

图8为本申请实施例提供的游戏中虚拟载具的状态同步装置的结构示意图之一;

图9为本申请实施例提供的游戏中虚拟载具的状态同步装置的结构示意图之二。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

一般游戏场景中,游戏角色在状态同步下,服务器需要将所有玩家的位置,方向等快照信息通过网络传递给每个客户端,然后客户端根据快照序列来做插值表现。而游戏角色的帧同步则是把用户的输入封装成帧消息来驱动所有客户端的同步方案。而载具同步的姿态数据包括载具的当前位置、以及三种旋转角,偏航角、俯仰角、翻滚角。

目前一般通过以下两种方式来实现游戏场景中载具的同步:

方案1),客户端模拟决定本地载具的位置和旋转角,并通过服务器转发至其他各个客户端。而客户端中的远端载具(待碰撞载具)全是质量无穷大的运动学kinematic对象,即这样可以避免客户端物理载具出现发生碰撞的问题。

方案2),服务器进行载具的物理模拟并将载具的姿态信息转发给各个客户端,每个客户端类似播放器,仅将服务器发送的载具物理位置和姿态信息进行表现。

其中,对于方案1来说,由于待碰撞的远端载具是质量无穷大的载具,即客户端本地载具无法撞动对方。这种解决方案虽然避免了载具碰撞同步的姿态不一致问题,但是存在当物理载具碰撞时不够真实且不符合物理现象的问题。由于现在游戏质量品质不断提升,这样的游戏中虚拟载具的状态同步方案不足以满足当前物理载具系统的需求。

对于方案2来说,在端游中,由于网络延迟较小,通过服务器来进行载具物理模拟能够解决载具同步姿态不一致的问题,但是这样同时会导致服务器性能压力较大。而在手游中,由于网络延迟和波动都比较大,如果由服务器来进行载具物理模拟,在网络波动时,会导致手机玩家用户的操作延迟较高,出现体验较差的问题。

基于此,本申请实施例提供的一种游戏中虚拟载具的状态同步方法和装置,解决了各个游戏客户端中的载具同步出现姿态不一致的技术问题,减少操作延迟,降低服务器的运行负载,提升了用户体验。

需要说明的是,本发明实施例中的物理载具,实际上是在终端的图像用户界面进行显示的虚拟物理载具,这里均称为虚拟载具。

本申请实施例中的游戏中虚拟载具的状态同步方法可分别应用于终端和服务器中。其中,该终端可以为本地终端,该服务器可以包括pc端或上位机,其中,在游戏场景中的游戏中虚拟载具的状态同步情况可通过图形用户界面提供给本地终端进行显示。其中,本地终端用于通过图形用户界面与用户进行交互。该本地终端将图形用户界面提供给玩家的方式可以包括多种,例如,可以渲染显示在终端的显示屏上,或者,通过全息投影提供给玩家。

作为另一个示例,本地终端可以包括显示屏和处理器,该显示屏用于呈现图形用户界面,该图形用户界面包括虚拟载具所在的游戏场景的游戏画面,该处理器用于运行该游戏的客户端、生成图形用户界面以及控制图形用户界面在显示屏上的显示。

例如,图1为本申请实施例提供的应用场景示意图。如图1所示,该应用场景可以包括终端(例如,手机101、计算机、平板电脑等)和服务器102,该终端可以通过有线网络或无线网络与服务器102进行通信。其中终端用于运行客户端,通过该客户端可以与服务器102进行交互。

再例如,终端还可以包括本地终端,其中,本地终端主要用于显示针对客户端的图形用户界面。

下面以手机101为例进行说明。如图2所示,手机101包括:收发器210、存储器220、显示屏230、处理器240等部件。本领域技术人员可以理解,图2中示出的计算机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。本领领域技术人员可以理解显示屏230属于用户界面(ui,userinterface),且手机101可以包括比图示或者更少的用户界面。

收发器210可以通过无线通信与网络和其他设备通信。该无线通信可以使用任一通信标准或协议。

存储器220可用于存储软件程序以及模块,处理器240通过运行存储在存储器220的软件程序以及模块,从而执行手机101的各种功能应用以及数据处理。存储器220可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据手机101的使用所创建的数据等。此外,存储器220可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

显示屏230可用于显示图形用户界面和接收用户针对图形用户界面的操作。具体的显示屏230可包括显示面板和触控面板。其中显示面板可以采用lcd(liquidcrystaldisplay,液晶显示器)、oled(organiclight-emittingdiode,有机发光二极管)等形式来配置。

手机101还包括操作面板,用于接收针对图形用户界面的操作,该操作面板可以为覆盖于显示屏230上的触控面板,也可以为与显示屏230设置相对独立的键盘装置、鼠标等。因此,操作面板与显示屏230可以作为两个独立的部件来实现也可以集成实现。

操作面板接收按键、触摸等操作带来的信息,并将其转换成处理器能够处理的信息,再送给处理器240,显示屏230能接收处理器240发来的命令并加以执行。例如,操作面板接收到在其上或附近的操作后,传送给处理器240以确定用户输入,随后处理器240响应于用户输入,在显示屏230上提供相应的视觉输出。

处理器240是手机101的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器220内的软件程序和/或模块,以及调用存储在存储器220内的数据,执行手机101的各种功能和处理数据,从而对计算机进行整体监控。

手机101还包括给各个部件供电的电源(比如电池),电源可以通过电源管理系统与处理器240逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗等功能。

下面再通过图3对服务器进行说明,如图3所示,服务器300包括:处理器301、存储器302和总线,存储器302存储有处理器301可执行的机器可读指令,当电子设备运行时,处理器301与存储器302之间通过总线通信,处理器301执行机器可读指令,以执行如上游戏中虚拟载具的状态同步方法的步骤。

具体地,上述存储器302和处理器301能够为通用的存储器和处理器,这里不做具体限定,当处理器301运行存储器302存储的计算机程序时,能够执行如上方法。

本领域技术人员可以理解,图3中示出的服务器的结构并不构成对开发终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。

下面结合附图对本发明实施例进行进一步地介绍。

图4为本申请实施例提供的游戏中虚拟载具的状态同步方法的流程示意图之一。该方法应用于游戏客户端,如图4所示该方法包括:

步骤s402,在虚拟载具由客户端控制的期间内,向服务器同步虚拟载具的第一状态信息,第一状态信息用于服务器针对虚拟载具进行碰撞预测计算;

步骤s404,响应于服务器在预测到虚拟载具将发生碰撞时发送的第一切换指令,将虚拟载具切换为由服务器控制,并接收服务器发送的在由服务器控制的期间内虚拟载具的第二状态信息。

通过本申请实施例,在一些具有载具碰撞情况的游戏场景中,可通过切换客户端和服务器的载具控制权,来实现各个客户端的载具碰撞姿态同步的目的。其中,当载具控制权在客户端时,此时不会发生载具碰撞,由客户端确定虚拟载具的第一状态信息,并同步至服务器,以使服务器同步至当前游戏场景中的其他客户端,以减少操作延迟,并降低服务器运行负载。当预测到载具即将碰撞时,将控制权交给服务器,由服务器产生虚拟载具的第二状态信息,并同步至当前游戏场景中的各个客户端,解决了载具碰撞同步后姿态不一致的问题。

可以理解的是,在载具不会发生碰撞的情况下,客户端接管虚拟载具的控制权,将确定的第一状态信息通过服务器转发,不存在操作延迟;而预测到会发生碰撞时,虚拟载具的控制权交由服务器,此时由服务器将产生的第二状态信息转发至各个客户端,以使各个客户端中的虚拟载具根据第二状态信息确定当前游戏场景中的当前游戏画面。由于服务器来模拟处理载具来确定虚拟载具的第二状态信息,可能会存在部分操作延迟的情况,但是服务器控制时间相对较短,所以该方案的平均操作延迟较低。

其中,第一状态信息的来源可包括由玩家操作控制下的虚拟载具产生得到,或者,通过客户端自行模拟得到。如,客户端通过获取玩家操作控制指令,记录或计算虚拟载具的第一状态信息,或者,客户端在实际游戏场景中(如颠簸路况),自主对虚拟载具的状态进行模拟,得到第一状态信息。

下面结合具体实施例对上述步骤s402-s404进行详细介绍。

在一些实施例中,在步骤s402中向服务器同步所述虚拟载具的第一状态信息之前,还具体包括以下步骤:

步骤1.1),在所述虚拟载具由客户端控制的期间内,根据针对所述虚拟载具的第一操作指令,确定所述虚拟载具的第一状态信息。

可以理解的是,当游戏客户端接管载具的控制权时,游戏客户端需要根据虚拟载具的物理参数以及用户输入的第一操作指令对虚拟载具进行模拟,得到第一状态信息,并将第一状态信息同步至服务器。此时的服务器无需进行物理模拟,即可得到第一状态信息,而直接将客户端确定的第一状态信息同步至余下客户端,有效地降低服务器的性能消耗。

为了使虚拟载具姿态数据的显示效果更加精确,各个客户端可能会对模拟后的状态数据进行进一步平滑处理,在一些实施例中,步骤1.1)还可具体包括以下步骤:

步骤1.1.1),根据针对所述虚拟载具的第一操作指令,基于所述虚拟载具创建的一第一模拟载具,模拟得到所述第一模拟载具的当前状态;

步骤1.1.2),基于所述第一模拟载具的当前状态确定所述虚拟载具的第一状态信息,所述虚拟载具的第一状态信息平滑趋近于所述第一模拟载具的当前状态。

需要说明的是,游戏客户端中包括有本地物理载具(第一模拟载具),服务器中包括有存在于服务器的物理载具(第二模拟载具),这里,第一模拟载具与第二模拟载具具有相同的物理参数,即可认为除存储位置不同其他相同的两个物理载具。

上述实施例中的当前状态为物理载具模拟后得到的物理快照信息,一般可包括载具位置、载具旋转四元数、速度等。

其中,当服务器发送第一控制权切换指令给客户端时,客户端停止模拟产生虚拟载具的第一状态信息。

在一些可能的实施例中,步骤1.1.2)可具体包括:

通过线插值与加权平均插值方法以及第一模拟载具的当前状态,计算得出虚拟载具的第一状态信息。

这里,上述实施例中的姿态表现平滑处理过程可通过插值算法来实现。由于本发明实施例的主要应用于是射击类、坦克类等游戏场景中,其中,坦克载具在没有移动速度时,仍可以进行转向操作,而且还需要在游戏客户端以及服务器之间切换控制权时实现无缝切换的效果,因此,本发明实施例结合了加权平滑插值和线性插值方法来进行融合插值。

在上述实施例的基础上,为了进一步实现低操作延迟,当客户端主控虚拟载具时,本发明实施例通过在客户端本地创建两个物理载具来实现姿态平滑表现。其中一个为第一模拟载具a,可根据运行数据进行姿态真实表现,并可在接受玩家输入指令后,由客户端的物理引擎进行模拟,该载具a不在客户端进行显示。另外一个则是虚拟载具b,于客户端进行显示,玩家可通过客户端查看到的虚拟载具。此外,服务器中还包括一个记录服务器中载具位置和旋转四元数的第二模拟载具s。通过对载具b进行处理,并使其能够平滑追赶载具a来达到低操作延迟并且显示平滑的效果,其中,上述载具之间的载具位置追赶情况,具体可由下面公式进行实现:

pos=poss*lerpt+posa*(1-lerpt)

posb=pos*lerpb+posb*(1-lerpb)

qb=slerp(q,qb,lerpb)=(qb*q-1)lerpbq

其中,poss表示客户端第一模拟载具a在服务器的位置,posa表示第一模拟载具a在客户端的位置,posb表示虚拟载具b在客户端的位置。qs表示客户端第一模拟载具a在服务器的旋转角四元数,qa表示第一模拟载具a在客户端的旋转角四元数,qb表示虚拟载具b在客户端的旋转角四元数。

需要说明的是,lerpt为一个插值参数,取值范围为[0,1]之间。当客户端主控第一模拟载具a时,lerpt=0,此时,玩家可见的虚拟载具b一直持续在对第一模拟载具a的位置做线性插值。而lerpb的范围在[0.2,0.5]之间,具体由网络延迟来决定,当网络延迟较高时,lerpb相应较小,这是为了让虚拟载具b的位置和服务器中第二模拟载具s的位置的距离相对较近,保证在进行载具控制权切换时,载具不会出现过大的加速或者减速。同理,载具间的旋转角度追赶情况,通过对载具的旋转角度进行球面插值实现。在此不再赘述。最后根据上述载具位置、旋转角度的计算结果设置虚拟载具的位置posb和旋转角qb。

在一些实施例中,当服务器判定虚拟载具碰撞结束时,此时处于在虚拟载具不会发生碰撞的情况下,服务器发送第二操作指令至客户端,将虚拟载具的控制权由服务器交由客户端。此时客户端会反向进行缓冲,每帧不断更新插值参数lerpt的值,将lerpt从1减少至0。当lerpt=0时,客户端重新主控第一模拟载具,此时,玩家可见的虚拟载具b一直持续在对第一模拟载具a的位置做线性插值,以实现虚拟载具b平滑追赶第一模拟载具a的效果。

可以理解的是,姿态同步是指所有客户端通过服务器来同步虚拟载具在其他客户端的包括位置和旋转角的当前时刻状态。当客户端主控虚拟载具时,客户端需要定时采集包括用户输入的第一操作指令和物理参数的本地载具数据,并按固定频率同步至服务器。作为一种可选的实施例,服务器中可按照客户端同步的物理参数,使第二模拟载具与客户端中的第一模拟载具具有相同配置。该物理参数包括载具当前旋转角、载具当前位置、载具当前线速度与角速度等。

在一些实施例中,上述实施例中的步骤s404中同步所述服务器在控制权属于服务器的期间内确定所述虚拟载具的第二状态信息之前,该方法还具体包括以下步骤:

步骤2.1),在所述虚拟载具由服务器控制的期间内,将所述第一操作指令同步到所述服务器,以使所述服务器基于所述第一操作指令,确定所述虚拟载具的第二状态信息。

这里,服务器根据用户初始发送的第一操作指令确定虚拟载具的第二状态信息。如,初始时(如控制权属于客户端的时间段),用户输入了“控制载具前行”的操作指令,当此时处于控制权属于服务器的期间内,服务器仍根据初始时的用户操作指令“载具前行”确定第二状态信息。

作为一种可选的实施例,上述实施例中的步骤s404中在接收所述服务器发送的在由所述服务器控制的期间内所述虚拟载具的第二状态信息之前,该方法还具体包括:

步骤3.1),在所述虚拟载具由服务器控制的期间内,确定针对所述虚拟载具的第二操作指令;

步骤3.2),将所述第二操作指令同步到所述服务器,以使所述服务器基于所述第二操作指令,确定所述虚拟载具的第三状态信息。

这里,服务器根据用户在此时(控制权属于服务器的时间段)发送的第二操作指令确定虚拟载具的第三状态信息。如,初始时(如控制权属于客户端的时间段),用户输入了“控制载具前行”的操作指令,当此时处于控制权属于服务器的期间内,用户又输入了控制“载具旋转”的操作指令,服务器根据此时的用户操作指令“载具旋转”产生当前时刻的第三状态信息。

在一些实施例中,为了进一步实现服务器控制虚拟载具确定的当前姿态的平滑效果,上述实施例中针对所述虚拟载具的第二状态信息,即同步至客户端的当前状态为所述虚拟载具的第二模拟载具的当前状态,步骤s404中在接收所述服务器发送的在由所述服务器控制的期间内所述虚拟载具的第二状态信息之后,可具体采用以下方式:

基于所述第二模拟载具的第二状态信息确定所述虚拟载具的当前状态,所述虚拟载具的当前状态平滑趋近于所述第二模拟载具的当前状态。

应用本发明实施例进行碰撞的物理载具,不再产生由于远端载具质量无限大而无法推动的效果,通过服务器的物理模拟,可以大大提高碰撞的真实性。此外,由于服务器存在碰撞预测,可以流畅、无缝地进行服务器、游戏客户端之间物理载具控制权的切换。

图5为本申请实施例提供的游戏中虚拟载具的状态同步方法的流程示意图之二。该方法应用于服务器,如图5所示该方法包括:

步骤s502,在虚拟载具由客户端控制的期间内,同步虚拟载具的第一状态信息;

步骤s504,基于虚拟载具的第一状态信息针对虚拟载具进行碰撞预测;

步骤s506,当预测到虚拟载具将发生碰撞时,发送第一控制权切换指令至客户端,将虚拟载具切换为由服务器控制,并向客户端同步在服务器控制的期间内虚拟载具的第二状态信息。

通过本申请实施例,当服务器检测到虚拟载具会发生碰撞时,服务器接管控制权,对客户端发送第一控制权切换指令,当客户端接收到之后,客户端不再对虚拟载具进行物理模拟。客户端将玩家输入信息(第一操作指令),如前进、转向等输入等信息上传至服务器,然后接受服务器对虚拟载具模拟后的载具物理姿态信息(当前姿态),在客户端本地进行表现。当服务器检测到虚拟载具不会发生碰撞时,发送第二控制权切换指令给客户端,并将客户端模拟的虚拟载具姿态信息(当前状态)转发到各个客户端。

客户端和服务器根据载具碰撞情况,完成虚拟载具控制权的切换,实现无碰撞时客户端模拟姿态同步无时延;当有碰撞时,由于碰撞后是由服务器统一控制的,所以各个客户端虚拟载具在碰撞后呈现的当前姿态(位置和旋转)一致,进而解决各个游戏客户端中的载具同步出现姿态不一致的技术问题。

在一些可能的实施例中,步骤s506中向客户端同步在服务器控制的期间内虚拟载具的第二状态信息之前,还具体包括以下步骤:

步骤4.1),在所述虚拟载具的控制权属于服务器的期间内,根据针对所述虚拟载具的第一操作指令,确定所述虚拟载具的第二状态信息。

此外,由于服务器接管虚拟载具的控制时间相对较短,参与模拟的时间也相对较短,所以相比于整个载具碰撞过程全部由服务器模拟的方案,大大降低了服务器的物理模拟的负载。

在一些可能的实施例中,服务器收到客户端定时同步的本地载具数据后,将本地载具数据存储于服务器物理端,以便于碰撞后的模拟使用。与此同时,服务器将本地载具数据发送至当前游戏场景中的其他游戏客户端,以确保所有客户端的载具的姿态位置同步正确。

在前述实施例的基础上,作为另一种可能的实施例,当服务器检测到当前位置即将发生碰撞,则会向客户端发送第一控制权切换指令。当客户端接收到服务器的第一控制权切换指令,控制权从客户端交由服务器。此时客户端需要开始做控制权切换过程的缓冲操作,以完成无缝切换,即为将虚拟载具b从追逐第一模拟载具a流畅地切换至追逐第二模拟载具s,具体为:

客户端在每帧中不断更新lerpt的值,将lerpt从0增加至1。此时的虚拟载具b的位置会去追逐第一模拟载具a和第二模拟载具s的权重计算结果,以实现流畅地切换追逐对象。最后,当客户端切换结束后,lerpt=1时,就进入了服务器主控虚拟载具的阶段,虚拟载具当前姿态完全是由服务器模拟来控制的,此时的虚拟载具b一直追逐第二模拟载具s。

在一些实施例中,为了对虚拟载具的碰撞情况进行精确检测,以便于实现客户端与服务器对虚拟载具控制权的及时切换,保证虚拟载具姿态同步的一致性,上述步骤s504具体可以包括以下步骤:

步骤5.1),基于所述虚拟载具的当前状态和物理参数建立所述虚拟载具的方向包围盒,所述当前状态包括载具位置、载具速度、载具前向方向矢量、载具右向方向矢量和载具预计移动时长,所述物理参数包括载具长度、载具宽度和载具宽度附加值;

步骤5.2),通过所述虚拟载具的方向包围盒来进行碰撞检测。

在一些可能的实施例中,游戏场景中可能涉及多辆虚拟载具的碰撞,为了保证服务器与客户端之间的控制权切换的准确及时性,所以在服务器端需要对游戏场景中所有的虚拟载具进行碰撞预测,进而提前通知客户端进行控制权的切换。

此外,由于本发明实施例需要进行流畅地切换客户端、服务器的控制权,所以需要提前在碰撞发生前就通知客户端载具,以保证在载具碰撞时以完成了控制权的切换。

本发明实施例提供了能够提前对碰撞进行预测的碰撞检测算法,如图6所示,服务器用二维的方向包围盒(orientedboundingbox,obb)来表示虚拟载具,该方向包围盒添加速度因素,用来进行碰撞预测。其中,服务器根据当前状态和物理参数来构建方向包围盒,虚拟载具被包围在方向包围盒内部,每个载具的方向包围盒如下式进行表示:

center=posvh+forwardvh*speedvh*0.5*t

e1=lengthvh+speedvh*t

e2=widthvh+w

axis1=forwardvh

axis2=rightvh

其中,axis1表示第一坐标轴,axis2表示第二坐标轴,e1表示包围盒长度的第一边长,e2表示包围盒长度的第二边长,center表示中心点,posvh表示载具的当前位置,forwardvh表示载具的前向方向矢量,rightvh表示载具的右方向矢量,speedvh表示载具的当前速度,t表示预测载具移动的时间长度,lengthvh表示载具的长度,widthvh表示载具的宽度,w表示宽度附加值。其中宽度附加值是一个经验参数,可根据实际情况进行设定,此参数用于预测载具的侧向碰撞。

在一些实施例中,为了能够通过方向包围盒更加准确地获知预测结果,步骤5.2)具体包括以下步骤:

步骤5.2.1),通过判断所述虚拟载具的方向包围盒在所有坐标轴的投影的重叠情况来进行检测所述虚拟载具是否会发生碰撞;

步骤5.2.2),若至少两个所述虚拟载具的方向包围盒在所有坐标轴的投影都重叠,则判定所述虚拟载具会发生碰撞;

步骤5.2.3),若至少两个所述虚拟载具的方向包围盒在所有坐标轴的投影并非都重叠,则判定所述虚拟载具不会发生碰撞。

这里,当两个方向包围盒obb在x、y轴上的投影都发生重叠时,则判定为即将碰撞;否则,判定为不会发生碰撞。

具体为,本发明实施例中的碰撞检测方法分别计算两个虚拟载具的方向包围盒在x、y坐标轴上的正负半轴上的投影是否都有重叠,如果4个坐标半轴上的投影都有重叠,则判定即将发生碰撞。否则认为不会发生碰撞。如图6所示,如,载具c的方向包围盒的边长为l1,载具d的方向包围盒的边长为l2,载具c在x轴的正负半轴的投影为投影1,载具d在x轴的正负半轴的投影为投影2,投影1和投影2在x轴的正负半轴上重叠。同理,载具c和载具d在y轴正负半轴的投影与具有相同的重叠情况,在此不再赘述。因此,可知载具c和载具d即将发生碰撞。

在游戏场景中出现多个虚拟载具时,可能并非所有的虚拟载具都会发生碰撞,若对所有的虚拟载具都进行碰撞检测,占用服务器资源的同时,增加了检测时间。因此,为了改善上述问题,本发明实施例在步骤5.2)之前,具体包括以下步骤:

步骤6.1),通过所述虚拟载具的中心点与待碰撞虚拟载具的中心点的垂直距离和水平距离分别进行高度检测和范围检测;

步骤6.2),当所述垂直距离小于预设高度距离阈值,且所述水平距离小于所述虚拟载具与所述待碰撞虚拟载具的长度之和时,再执行步骤5.2)。

这里,在实际应用中,服务器通过采用二维的方向包围盒obb来表示一个三维物理载具。为了优化检测算法,本发明实施例在进行投影重叠检测前,通过将距离相距较远的载具进行筛除,被筛除的载具无需做重叠检测,以减少重复进行投影重叠检测的载具的数量。具体为,需要先做一次高度检测以及一次范围检测,即检测两个载具的中心点的垂直距离vertical_dist,以及水平距离hori_dist。公式vertical_dist<阈值,用来筛选掉垂直高度距离相差过大的载具。这里,通过公式dist<l1+l2,用来筛选掉部分距离较远的载具。其中,l1表示载具1的方向包围盒obb1的长度,l2表示载具2的方向包围盒obb2的长度。

如,计算两个待碰撞载具中心点的垂直距离vertical_dist,如果vertical_dist>阈值,则认为这两个待碰撞载具不会发生碰撞;如果vertical_dist<阈值,则计算这两个待碰撞载具中心点的水平距离hori_dist;如果hori_dist>l1+l2,则认为这两个待碰撞载具不会发生碰撞;如果hori_dist<l1+l2,则进入步骤2.1),对这两个待碰撞载具进行检测。

可以理解的是,此处的阈值是一个经验值,可根据不同的应用场景进行不同调整。作为一种可选的实施例,对于坦克游戏应用场景来说,一般坦克的高度不会超过5m,因此,此处的阈值可选取为5m。

图7为游戏中虚拟载具的状态同步方法中服务器和游戏客户端的交互流程示意图,如图7所示该方法包括:

步骤s701,在虚拟载具的控制权属于客户端的期间内,游戏客户端根据针对虚拟载具的第一操作指令,基于虚拟载具的第一模拟载具,模拟得到第一模拟载具的当前状态;

步骤s702,基于第一模拟载具的当前状态确定虚拟载具的第一状态信息,虚拟载具的第一状态信息平滑趋近于第一模拟载具的当前状态;

步骤s703,游戏客户端向服务器同步客户端确定的虚拟载具的第一状态信息;

步骤s704,服务器将在客户端控制期间内的虚拟载具的第一状态信息同步至余下游戏客户端;

步骤s705,服务器基于虚拟载具的第一状态信息针对虚拟载具进行碰撞预测;

步骤s706,当预测到虚拟载具会发生碰撞时,服务器发送第一控制权切换指令至游戏客户端;

步骤s707,服务器将在控制权属于服务器的期间内确定的第二模拟载具的当前状态;

步骤s708,游戏客户端响应于第一控制权切换指令,同步服务器在控制权属于服务器的期间内确定的第二模拟载具的当前状态;

步骤s709,游戏客户端基于第二模拟载具的当前状态确定虚拟载具的第二状态信息,虚拟载具的第二状态信息平滑趋近于第二模拟载具的当前状态。

步骤s710,服务器将虚拟载具的第二状态信息同步至当前游戏场景中的余下各个游戏客户端。

在实际应用的优选实施例中,载具碰撞模拟同步分为两种方式,客户端模拟和服务器模拟。当虚拟载具不存在碰撞情况时,由服务器通知客户端接管载具模拟的控制权。当预测到载具即将碰撞时,由服务器通知客户端放弃载具模拟,由服务器进行接管载具模拟控制权,进而实现物理载具姿态同步的一致性,降低时延,节省服务器性能消耗。

作为一种可选的实施例,为了降低服务器与客户端之间传输过程中的数据包的大小,对需要传输的虚拟载具的第一状态信息、第二状态信息、第二模拟载具的当前状态进行采样,将采样后的数据再进行传输。接收的服务器或客户端对采样后的数据进行平滑处理,以呈现采样前的虚拟载具的第一状态信息、第二状态信息、第二模拟载具的当前状态。

图8为本申请实施例提供的一种游戏中虚拟载具的状态同步装置结构示意图。如图8所示,该装置应用于游戏客户端,该装置包括:

第一状态确定模块801,用于在所述虚拟载具由客户端控制的期间内,向服务器同步所述虚拟载具的第一状态信息,所述第一状态信息用于所述服务器针对所述虚拟载具进行碰撞预测计算;

第一同步模块802,用于响应于所述服务器在预测到所述虚拟载具将发生碰撞时发送的第一切换指令,将所述虚拟载具切换为由所述服务器控制,并接收所述服务器发送的在由所述服务器控制的期间内所述虚拟载具的第二状态信息。

在一些实施例中,所述第一状态确定模块801具体用于:

在所述虚拟载具由客户端控制的期间内,根据针对所述虚拟载具的第一操作指令,确定所述虚拟载具的第一状态信息。

在一些实施例中,所述第一状态确定模块801具体用于:

根据针对所述虚拟载具的第一操作指令,基于所述虚拟载具创建的一第一模拟载具,模拟得到所述第一模拟载具的当前状态;基于所述第一模拟载具的当前状态确定所述虚拟载具的第一状态信息,所述虚拟载具的第一状态信息平滑趋近于所述第一模拟载具的当前状态。

在一些实施例中,所述第一同步模块802具体用于:

在所述虚拟载具由服务器控制的期间内,将所述第一操作指令同步到所述服务器,以使所述服务器基于所述第一操作指令,确定所述虚拟载具的第二状态信息。

在一些实施例中,所述第一同步模块802具体用于:

在所述虚拟载具由服务器控制的期间内,确定针对所述虚拟载具的第二操作指令;将所述第二操作指令同步到所述服务器,以使所述服务器基于所述第二操作指令,确定所述虚拟载具的第三状态信息。

在一些实施例中,所述针对所述虚拟载具的第二状态信息为所述虚拟载具的第二模拟载具的当前状态;第一同步模块802具体用于:

基于所述第二模拟载具的第二状态信息确定所述虚拟载具的当前状态,所述虚拟载具的当前状态平滑趋近于所述第二模拟载具的当前状态。

图9为本申请实施例提供的一种游戏中虚拟载具的状态同步装置结构示意图。如图9所示,该装置应用于游戏客户端,该装置包括:

第二同步模块901,用于在所述虚拟载具由客户端控制的期间内,同步所述虚拟载具的第一状态信息;

预测模块902,用于基于所述虚拟载具的第一状态信息针对所述虚拟载具进行碰撞预测;

第二状态确定模块903,用于当预测到所述虚拟载具将发生碰撞时,发送第一控制权切换指令至所述客户端,将所述虚拟载具切换为由所述服务器控制,并向所述客户端同步在所述服务器控制的期间内所述虚拟载具的第二状态信息。

在一些实施例中,所述预测模块902具体用于:

基于所述虚拟载具的当前状态和物理参数建立所述虚拟载具的方向包围盒,所述当前状态包括载具位置、载具速度、载具前向方向矢量、载具右向方向矢量和载具预计移动时长,所述物理参数包括载具长度、载具宽度和载具宽度附加值;通过所述虚拟载具的方向包围盒来进行碰撞检测。

在一些实施例中,所述预测模块902具体用于:

通过判断所述虚拟载具的方向包围盒在所有坐标轴的投影的重叠情况来进行检测所述虚拟载具是否会发生碰撞;若至少两个所述虚拟载具的方向包围盒在所有坐标轴的投影都重叠,则所述虚拟载具会发生碰撞;若至少两个所述虚拟载具的方向包围盒在所有坐标轴的投影并非都重叠,则所述虚拟载具不会发生碰撞。

在一些实施例中,所述预测模块902具体用于:

通过所述虚拟载具的中心点与待碰撞虚拟载具的中心点的垂直距离和水平距离分别进行高度检测和范围检测;当所述垂直距离小于预设高度距离阈值,且所述水平距离小于所述虚拟载具与所述待碰撞虚拟载具的长度之和时,再执行通过所述虚拟载具的方向包围盒来进行碰撞检测的步骤。

在一些实施例中,所述第二状态确定模块903具体用于:

在所述虚拟载具由服务器控制的期间内,根据针对所述虚拟载具的第一操作指令,确定所述虚拟载具的第二状态信息。

本申请实施例提供的游戏中虚拟载具的状态同步装置,与上述实施例提供的游戏中虚拟载具的状态同步方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。

对应于上述游戏中虚拟载具的状态同步方法,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述游戏中虚拟载具的状态同步方法的步骤。

本申请实施例所提供的游戏中虚拟载具的状态同步装置可以为设备上的特定硬件或者安装于设备上的软件或固件等。本申请实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,前述描述的系统、装置和单元的具体工作过程,均可以参考上述方法实施例中的对应过程,在此不再赘述。

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

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

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

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

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1