一种游戏状态还原方法、装置、计算机设备和存储介质与流程

文档序号:33712163发布日期:2023-04-01 00:21阅读:69来源:国知局
一种游戏状态还原方法、装置、计算机设备和存储介质与流程

1.本发明涉及游戏技术领域,具体涉及一种游戏状态还原方法、装置、计算机设备和存储介质。


背景技术:

2.随着互联网技术的快速发展,人们常常会通过游戏类的应用程序进行娱乐,放松身心。在网络游戏中,一般需要游戏的客户端和服务端相互配合,使得用户之间可以在游戏世界中进行交互。
3.对于网络游戏来说,游戏的故障可能是由于客户端或者服务端的问题导致的,而目前在排查游戏故障原因时采用的方案一般是在客户端对实际游戏过程中服务端下发的数据包重新进行解析、执行以还原游戏过程。但是,采用这种方案,并不能确定在实际游戏过程中服务端的状态,无法查明由于服务端的问题导致的游戏故障原因。


技术实现要素:

4.本发明实施例提供一种游戏状态还原方法、装置、计算机设备和存储介质,可以全面地还原游戏过程中服务端的状态,便于在游戏出现故障时,排查可能出现在游戏服务端的问题以及问题原因。
5.本发明实施例提供一种游戏状态还原方法,包括:
6.获取客户端游戏数据,所述客户端游戏数据包括在客户端构建游戏世界时的初始化参数以及所述游戏世界对应的游戏更新数据序列;
7.根据所述初始化参数在服务端构建游戏世界;
8.从所述游戏更新数据序列中获取当前位于所述游戏更新数据序列首位的目标游戏更新数据;
9.基于所述目标游戏更新数据,对所述游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态;
10.返回执行所述从所述游戏更新数据序列中获取当前位于所述游戏更新数据序列首位的目标游戏更新数据的步骤,直到所述游戏更新数据序列中不存在游戏更新数据为止。
11.相应的,本发明实施例还提供一种游戏状态还原装置,包括:
12.游戏数据获取单元,用于获取客户端游戏数据,所述客户端游戏数据包括在客户端构建游戏世界时的初始化参数以及所述游戏世界对应的游戏更新数据序列;
13.游戏世界构建单元,用于根据所述初始化参数在服务端构建游戏世界;
14.更新数据获取单元,用于从所述游戏更新数据序列中获取当前位于所述游戏更新数据序列首位的目标游戏更新数据;
15.游戏世界更新单元,用于基于所述目标游戏更新数据,对所述游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态;
16.循环更新单元,用于返回执行所述从所述游戏更新数据序列中获取当前位于所述游戏更新数据序列首位的目标游戏更新数据的步骤,直到所述游戏更新数据序列中不存在游戏更新数据为止。
17.相应的,本发明实施例还提供一种计算机设备,包括存储器和处理器;所述存储器存储有应用程序,所述处理器用于运行所述存储器内的应用程序,以执行本发明实施例所提供的任一种游戏状态还原方法中的步骤。
18.相应的,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例所提供的任一种游戏状态还原方法中的步骤。
19.此外,本发明实施例还提供一种计算机程序产品,包括计算机程序或指令,所述计算机程序或指令被处理器执行时实现本发明实施例所提供的任一种游戏状态还原方法中的步骤。
20.采用本发明实施例的方案,可以获取客户端游戏数据,该客户端游戏数据包括在客户端构建游戏世界时的初始化参数以及该游戏世界对应的游戏更新数据序列,根据该初始化参数在服务端构建游戏世界,从该游戏更新数据序列中获取当前位于该游戏更新数据序列首位的目标游戏更新数据,基于该目标游戏更新数据,对该游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,返回执行该从该游戏更新数据序列中获取当前位于该游戏更新数据序列首位的目标游戏更新数据的步骤,直到该游戏更新数据序列中不存在游戏更新数据为止;由于在本发明实施例中,根据在实际游戏过程中的初始化参数在服务端构建了游戏世界,以及,根据游戏过程中的数据对服务端中的游戏世界进行更新,因此,可以全面地还原游戏过程中服务端的状态,便于在游戏出现故障时,排查可能出现在游戏服务端的问题以及问题原因。
附图说明
21.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
22.图1是本发明实施例提供的游戏状态还原方法的场景示意图;
23.图2是本发明实施例提供的游戏状态还原方法的流程图;
24.图3是本发明实施例提供的游戏状态还原方法的另一流程图;
25.图4是本发明实施例提供的游戏状态还原装置的结构示意图;
26.图5是本发明实施例提供的游戏状态还原装置的另一结构示意图;
27.图6是本发明实施例提供的计算机设备的结构示意图。
具体实施方式
28.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施
例,都属于本发明保护的范围。
29.本发明实施例提供一种游戏状态还原方法、装置、计算机设备和计算机可读存储介质。具体地,本发明实施例提供适用于游戏状态还原装置的游戏状态还原方法,该游戏状态还原装置可以集成在计算机设备中。
30.该计算机设备可以为终端等设备,包括但不限于移动终端和固定终端,例如移动终端包括但不限于智能手机、智能手表、平板电脑、笔记本电脑、智能车载等,其中,固定终端包括但不限于台式电脑、智能电视等。
31.该计算机设备还可以为服务器等设备,该服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(content delivery network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器,但并不局限于此。
32.本发明实施例的游戏状态还原方法,可以由服务器实现,也可以由终端和服务器共同实现。
33.下面以终端和服务器共同实现该游戏状态还原方法为例,对该方法进行说明。
34.如图1所示,本发明实施例提供的游戏状态还原系统包括终端10和服务器20等;终端10与服务器20之间通过网络连接,比如,通过有线或无线网络连接等,其中,终端10可以作为运行游戏客户端的计算机设备存在。
35.其中,终端10可以用于在实际游戏过程中记录客户端游戏数据,以及,将客户端游戏数据发送给服务器20等。
36.服务器20可以获取客户端游戏数据,客户端游戏数据包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列,根据初始化参数在服务端构建游戏世界,从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据,基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止。
37.可以理解的是,客户端游戏数据也可以是由服务器20生成的,本发明实施例对此不做限定。
38.以下分别进行详细说明。需要说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
39.本发明实施例将从游戏状态还原装置的角度进行描述,该游戏状态还原装置具体可以集成在服务器或终端中。
40.如图2所示,本实施例的游戏状态还原方法的具体流程可以如下:
41.201、获取客户端游戏数据,客户端游戏数据可以包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列。
42.在本发明实施例中,客户端游戏数据是基于实际游戏过程中游戏世界的相关数据得到的。比如,客户端游戏数据中可以包括但不限于在实际游戏过程中构建游戏世界时的初始化参数、对游戏世界进行更新的时间数据、在实际游戏过程中游戏用户通过客户端执行操作而生成的操作数据等等。
43.与客户端对应的,游戏可以设置有服务端。在一些可选的实施例中,服务端和客户端可以是基于状态同步的游戏同步方式进行交互。其中,状态同步的游戏同步方式的原理是把服务端将需要同步的信息(比如游戏对象的位置、游戏对象运动的方向等等),发给其他的客户端,其他的客户端可以在对应的位置创建出相同的实体,以实现在不同客户端中的数据同步。
44.例如,游戏可以在游戏服务器中设置有服务端,游戏的所有客户端均与该服务端连接,由服务端定时或不定时地向各个客户端发放游戏过程中需要同步的信息。
45.具体的,初始化参数可以用于在服务端和客户端创建游戏世界。可以理解的是,为了保证游戏用户在客户端和服务端的数据的一致性,客户端和服务端创建的游戏世界一般也是一致的,因此,在客户端构建游戏世界时的初始化参数,实际上也是在实际游戏过程中在服务端构建游戏世界的初始化参数。
46.其中,游戏更新数据序列可以是由在实际游戏过程中游戏世界进行更新时的相关数据组成的序列。比如,游戏更新数据序列可以包括但不限于每次游戏世界进行更新时的游戏世界时间、游戏用户通过客户端执行操作而生成的操作数据和/或游戏用户执行操作时的游戏世界时间等等。
47.可以理解的是,要还原实际游戏过程对应的游戏状态,需要在实际游戏过程中记录与游戏相关的数据,即生成客户端游戏数据,因此,步骤“获取客户端游戏数据”之前,本发明实施例提供的游戏状态还原方法还可以包括:
48.在实际游戏过程中,获取构建游戏世界的初始化参数,根据初始化参数构建游戏世界;
49.获取实际游戏过程中游戏世界的游戏数据,基于游戏数据对游戏世界进行更新,生成游戏更新数据序列;
50.将初始化参数和游戏更新数据序列存储为客户端游戏数据。
51.其中,获取的构建游戏世界的初始化参数,可以是在实际游戏过程中服务端构建游戏世界时的初始化参数,也可以是客户端构建游戏世界时的初始化参数。在一些示例中,可以根据初始化参数构建游戏世界得到游戏世界在游戏进程中的具体对象gameenv,同时将游戏世界的初始化参数储存到预设的存储对象中,该存储对象可命名为init_args。
52.具体的,步骤“根据初始化参数构建游戏世界”可以是在实际游戏过程中,在游戏的服务端和/或客户端构建游戏世界。
53.其中,游戏数据可以包括但不限于在实际游戏过程中每次游戏世界进行更新时的游戏世界时间、游戏用户通过客户端执行操作而生成的操作数据和/或游戏用户执行操作时的游戏世界时间等等。
54.在生成游戏更新数据序列时,可以是在实际游戏过程结束后,根据每条游戏数据对应的真实世界时间或者游戏世界时间,对游戏进行排序得到。或者,游戏更新数据序列,也可以是在实际游戏过程中,每得到一条游戏数据,就将该游戏数据存储到有序列表的尾部,等等。
55.例如,在一些可选的实施例中,游戏数据可以包括游戏用户通过客户端执行操作而生成的用户操作数据以及每次游戏世界进行更新时的游戏世界时间。服务端或客户端可以预先设置有一个有序的数据存储列表update_list。步骤“获取实际游戏过程中游戏世界
的游戏数据,基于游戏数据对游戏世界进行更新,生成游戏更新数据序列”具体可以包括:
56.若获取到从客户端输入的用户操作数据,对用户操作数据进行响应,以及,将用户操作数据存储到预设的数据存储列表的末位;
57.获取真实世界时间,将游戏世界的当前游戏时间更新为真实世界时间,得到更新后的当前游戏时间,将当前游戏时间存储到数据存储列表的末位;
58.返回执行若获取到从客户端输入的用户操作数据,对用户操作数据进行响应的步骤,直到实际游戏过程结束为止。
59.也就是说,在实际游戏过程中,可以根据初始化参数构建游戏世界得到gameenv,同时将参数储存到init_args;确定是否有客户端输入(用户操作数据),如果有,那么处理它,同时将输入数据储存到update_list尾部。
60.可以理解的是,在实际游戏过程中还可以对游戏世界进行更新。具体的,步骤“将游戏世界的当前游戏时间更新为真实世界时间,得到更新后的当前游戏时间”之前,本发明实施例提供的游戏状态还原方法还可以包括:
61.获取当前游戏时间,根据真实世界时间和当前游戏时间计算时间间隔;
62.根据时间间隔,对游戏世界进行更新。
63.具体的,时间间隔可以是使用真实世界时间减去当前游戏时间gameenv.game_time得到的经过的游戏时间delta_time。
64.在对游戏世界进行更新时,可以更新游戏世界对应的游戏时间,将原本游戏世界中的当前游戏时间gameenv.game_time修改为真实世界时间;还可以通过游戏世界更新的函数gameenv.update(delta_time),根据时间间隔更新游戏世界,例如更新游戏世界中的游戏角色的位置等等。
65.在一些示例中,会将更新后的gameenv.game_time储存到update_list的尾部,以便在服务端状态还原的过程中,可以根据游戏更新数据序列中存储的当前游戏时间计算时间间隔、对服务端的游戏世界进行更新等等。
66.202、根据初始化参数在服务端构建游戏世界。
67.其中,游戏世界可以是游戏应用程序在终端和/或服务器上运行时提供的游戏场景。游戏世界中可以包括游戏角色、游戏道具等游戏对象。
68.可以理解的是,在服务端构建游戏世界时,可以无需进行游戏界面的画面渲染,只需要在服务端中创建出游戏世界在游戏进程中对应的游戏对象、游戏道具以及存储各游戏对象、游戏道具的位置等信息等等。
69.具体的,可以使用初始化参数init_args,构建游戏世界得到游戏世界在游戏进程中的具体对象gameenv。
70.203、从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据。
71.在一些可选的实施例中,获取游戏更新数据之前可以判断游戏更新数据序列是否为空,如果游戏更新数据序列为空,说明需要进行游戏状态还原的游戏进程已经结束,此时,则无需继续对服务端的游戏世界进行更新。
72.若游戏更新数据序列不为空,则可以从数据按时间顺序排列的游戏更新数据序列中获取目标游戏更新数据。
73.在另一些可选的实施例中,可以直接从游戏更新数据序列中获取目标游戏更新数据,如果获取的目标游戏更新数据为空,也可说明需要进行游戏状态还原的游戏进程已经结束。
74.204、基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
75.具体的,游戏服务端状态指的是通过游戏状态还原,得到的实际进行游戏的过程中在当前游戏时间服务端的状态信息。
76.比如,在服务端还原出的游戏世界的当前游戏时间为50s,游戏服务端状态即为实际游戏过程中在第50s时服务端的状态信息。
77.在实际应用过程中,目标游戏更新数据可以包括至少一种类型。
78.在一些可选的实施例中,目标游戏更新数据可以是在实际游戏过程中游戏世界的更新时间,步骤“基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态”,可以包括:
79.若目标游戏更新数据为游戏世界更新时间,获取游戏世界对应的当前游戏时间;
80.计算游戏世界更新时间和当前游戏时间之间的时间间隔;
81.根据游戏时间间隔对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
82.其中,游戏世界更新时间为在实际游戏过程中对游戏世界进行更新时的真实世界时间,也就是实际游戏过程中在对游戏世界更新后得到的新的当前游戏时间。而游戏状态还原过程中的当前游戏时间为还原出的游戏世界在该时刻对应的游戏世界时间。
83.一般来说,游戏世界通常有自己的游戏时间,游戏会以一定的帧率更新游戏世界,同时也会更新游戏时间。
84.可以理解的是,在服务端更新游戏世界时,也会对游戏世界的当前游戏时间进行更新。也就是说,本发明实施例提供的游戏状态还原方法还可以包括:根据游戏世界更新时间对游戏世界的当前游戏时间进行更新,得到新的当前游戏时间。
85.在另一些可选的实施例中,目标游戏更新数据可以是在实际游戏过程中游戏用户通过客户端执行某些操作而生成的用户操作数据,步骤“基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态”,可以包括:
86.若目标游戏更新数据为用户操作数据,根据用户操作数据进行模拟响应,以对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
87.也就是说,在还原游戏状态的过程中,如果发现在实际游戏过程中,用户曾通过客户端执行过某些游戏操作进而生成了用户操作数据,此时,可以在服务端模拟对用户操作数据做出响应,以正确及时地对游戏世界进行更新,使得还原的游戏服务端状态与实际游戏时匹配。
88.在游戏中,一般会使用大量的随机数来更新游戏世界。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。因为游戏代码里面大量使用随机数,要想还原某场游戏的状态,还原过程中每次随机的结果必须要和该游戏的结果一致。
89.为了达到该目的,需要保存该场游戏的随机数种子,也就是说,客户端游戏数据中
还可以包括游戏世界的游戏随机种子,步骤“基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态”之前,本发明实施例提供的游戏状态还原方法还可以包括:
90.根据游戏随机种子,进行随机数生成计算,得到伪随机数。
91.进一步的,可以使用伪随机数对游戏世界进行更新,步骤“基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态”,具体可以包括:
92.基于目标游戏更新数据和伪随机数,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
93.其中,随机种子(random seed)是一种以随机数作为对象的以真随机数(种子)为初始条件的随机数。使用该种子的随机器对随机种子进行随机运算,每次随机的结果都会和游戏过程的结果一致。
94.205、返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止。
95.可以理解的是,当游戏更新数据序列中不存在游戏更新数据时,说明需要进行游戏状态还原的实际游戏过程不再需要进行游戏世界的更新,也就是说,实际游戏过程已经结束。
96.在实际应用过程中,通常一个游戏进程需要以固定帧率更新游戏世界,例如频率为30帧(每秒更新30次)的游戏进程,游戏每一帧的世界为0.03333秒(1/30秒)。在一些可选的实施例中,为了使还原得到的游戏服务端状态更平稳,步骤“返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤”之前,本发明实施例提供的游戏状态还原方法还可以包括:
97.获取游戏世界的更新帧率;
98.根据更新帧率,计算游戏世界对应的更新时间间隔。
99.其中,更新帧率即为游戏进程更新游戏世界的游戏帧率。
100.相应的,步骤“返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止”,可以包括:
101.等待更新时间间隔,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止。
102.使用固定的更新帧率计算出的更新时间间隔对游戏世界进行更新的原因是,更新帧率可以满足游戏的刷新要求,同时固定的帧率会使得游戏表现更平稳。
103.可以理解的是,在服务端还原出实际游戏过程中游戏服务端的状态后,如果实际游戏过程中出现了问题,此时,除了根据在客户端的录像,还可以根据服务端状态确定问题发生的位置。本发明实施例提供的游戏状态还原方法还可以包括:
104.获取游戏故障时间,从已还原的游戏服务端状态中,确定游戏故障时间对应的游戏服务端状态;
105.基于游戏服务端状态,对游戏进程进行故障调试,得到游戏故障时间对应的游戏故障原因。
106.其中,游戏故障时间可以是实际游戏过程中的游戏世界的时间、真实世界时间或者出现游戏故障的游戏帧数(即从第几个游戏帧开始出现游戏故障)。
107.具体的,故障调试时可以是获取当前服务端状态下的进程信息进行分析,还可以在游戏进程中插入监测日志,追踪导致服务端状态出现问题的代码,等等。
108.例如,一场游戏可以由游戏对象a和游戏对象b组成,那么游戏的状态可以认为是由游戏对象a和游戏对象b的状态组成。
109.每个游戏对象的状态包括物理状态和技能状态组成,如下:
110.1、物理状态,例如游戏对象的位置和朝向;
111.2、技能状态,例如游戏对象的攻击技能的技能范围(在游戏无异常的情况下,该游戏对象不能攻击超过技能范围的游戏对象)、攻击技能是否冷却中(在游戏无异常的情况下,冷却中的技能不能释放)、攻击技能是否被禁用(在游戏无异常的情况下,禁用中的技能不能释放)。
112.进一步假设游戏场景是一个二维的场景,场景位置坐标以(x,y)格式表示,游戏对象a和游戏对象b的当前位置为游戏对象a:(0,0)、游戏对象b:(0,5)。若游戏对象b不动,游戏对象a的速度为1,并朝着b移动,到达b附近后,对游戏对象b释放攻击技能。
113.游戏按照固定帧率更新,假设游戏更新的帧率为1帧(每秒更新1帧,每帧时间(delta_time)为1秒),由于游戏对象b不动,那么此场景下的游戏状态变化可以简化为游戏对象a的状态,若游戏世界更新序列为:游戏对象a:(0,0)、游戏对象a:(0,1)、游戏对象a:(0,2)、游戏对象a:(0,3)、游戏对象a:(0,4)、游戏对象a对游戏对象b释放攻击技能,但是技能释放失败了。
114.正常情况下,游戏对象a在位置(0,4)的时候,攻击技能的范围是可以攻击到游戏对象b的,而攻击技能在客户端表现是不在冷却中也没有被禁用,然而技能却释放失败。这是一个典型的游戏故障,但是仅通过客户端录像不能很好地查找此类问题,因为开发人员没有服务端的状态数据,开发人员不能很容易地确定攻击技能哪个状态出了问题,是技能范围、冷却状态、还是禁用状态?即使开发人员知道了是技能哪个状态出了问题,也很难定位出现问题的原因,因为影响技能状态的代码非常多。
115.简单来说,由于状态同步的游戏缺少状态还原装置,导致无法重现出现问题时的进程环境,进而无法对服务端进程进行调试,导致定位问题很困难。
116.当服务端进程恢复到出问题时候的状态后,如上例,开发人员可以在第6帧暂停进程,此时就可以对进程进行调试,通过查看进程内存数据,可以知道哪个状态出问题了;也可以通过添加日志,追踪导致状态出问题的代码。
117.由上可知,本发明实施例可以获取客户端游戏数据,客户端游戏数据包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列,根据初始化参数在服务端构建游戏世界,从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据,基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止;由于在本发明实施例中,根据在实际游戏过程中的初始化参数在服务端构建了游戏世界,以及,根据游戏过程中的数据对服务端中的游戏世界进行更新,因此,可以全面地还原游戏过程中服
务端的状态,便于在游戏出现故障时,排查可能出现在游戏服务端的问题以及问题原因。
118.根据前面实施例所描述的方法,以下将举例作进一步详细说明。
119.在本实施例中,将结合图1的系统进行说明。
120.如图3所示,本实施例的游戏状态还原方法,具体流程可以如下:
121.301、在实际游戏过程中,获取构建游戏世界的初始化参数,根据初始化参数构建游戏世界。
122.在本发明实施例中,gameenv表示游戏世界在游戏进程里面的具体对象;gameenv.game_time:储存了游戏时间的变量,游戏代码通常使用它获得游戏时间而不是真实世界时间;gameenv.update(delta_time):游戏世界更新函数,它的参数delta_time是经过了的游戏时间。
123.根据初始化参数构建游戏世界得到gameenv,同时将初始化参数储存到init_args。其中,init_args用于存储游戏世界的初始化参数。
124.302、设置实际游戏过程中的随机数种子。
125.设置游戏随机数种子,同时将种子储存到random_seed。random_seed:游戏的随机种子。
126.303、获取实际游戏过程中游戏世界的游戏数据,基于游戏数据对游戏世界进行更新,生成游戏更新数据序列。
127.具体的,步骤303可以包括:重复以下步骤直到游戏结束:
128.睡眠一个游戏帧时间;
129.检查是否存在客户端输入的游戏数据,如果有,那么处理游戏数据,同时将输入的游戏数据储存到update_list尾部;
130.使用真实世界时间减去gameenv.game_time得到经过的游戏时间delta_time;
131.更新游戏时间,将gameenv.game_time设置为真实世界时间,并将此时的gameenv.game_time储存到update_list的尾部;
132.使用函数gameenv.update(delta_time)更新游戏世界。
133.delta_time是本次更新游戏世界与上次更新游戏世界之间经过的时间,例如更新频率为30帧的游戏,delta_time通常是0.03333秒。delta_time在游戏更新中是很重要的,例如游戏世界里面的物理系统更新,物理系统更新通常是更新游戏内单位和朝向,
134.如具有某个匀速直线运动的单位,本次游戏更新的位置为:当前位置+速度*delta_time;从物理系统引出,delta_time对游戏更新是很重要的,这主要是因为游戏内很多的表现都是模拟真实世界,而真实世界的变化是随着时间变化的,只要delta_time足够小就可以满足了游戏要求,使游戏表现得正常流畅。
135.304、获取在客户端构建游戏世界时的初始化参数、随机数种子以及游戏世界对应的游戏更新数据序列。
136.305、根据初始化参数在服务端构建游戏世界。
137.使用初始化参数init_args构建游戏世界得到原始的gameenv。
138.306、从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据。
139.使用random_seed设置随机数种子后,本发明实施例可以重复以下步骤直到游戏
结束:
140.睡眠一个游戏帧时间;
141.检查update_list是否为空,如果为空,那么就结束游戏状态还原,否则获取update_list中的第一个元素(目标游戏更新数据);
142.如果这个元素是玩家输入数据,那么处理这个输入数据,返回执行睡眠一个游戏帧时间的步骤;
143.如果这个元素是某次更新游戏世界的游戏时间,将该时间减去gameenv.game_time得到delta_time,更新游戏时间,将gameenv.game_time设置为该时间;
144.使用函数gameenv.update(delta_time)更新游戏世界,返回执行睡眠一个游戏帧时间的步骤。
145.307、基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
146.以moba游戏为例,每次游戏都按场次为单位,update_list保存了该场游戏的客户端输入和游戏更新时间线。在还原装置中,每次更新都会从update_list中pop出元素,update_list为空自然说明该场游戏结束了。
147.308、返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止。
148.由上可知,本发明实施例可以获取客户端游戏数据,客户端游戏数据包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列,根据初始化参数在服务端构建游戏世界,从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据,基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止;由于在本发明实施例中,根据在实际游戏过程中的初始化参数在服务端构建了游戏世界,以及,根据游戏过程中的数据对服务端中的游戏世界进行更新,因此,可以全面地还原游戏过程中服务端的状态,便于在游戏出现故障时,排查可能出现在游戏服务端的问题以及问题原因。
149.为了更好地实施以上方法,相应的,本发明实施例还提供一种游戏状态还原装置。
150.参考图4,该装置包括:
151.游戏数据获取单元401,可以用于获取客户端游戏数据,客户端游戏数据可以包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列;
152.游戏世界构建单元402,可以用于根据初始化参数在服务端构建游戏世界;
153.更新数据获取单元403,可以用于从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据;
154.游戏世界更新单元404,可以用于基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态;
155.循环更新单元405,可以用于返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止。
156.在一些可选的实施例中,游戏世界更新单元404,可以用于若目标游戏更新数据为
游戏世界更新时间,获取游戏世界对应的当前游戏时间;
157.计算游戏世界更新时间和当前游戏时间之间的时间间隔;
158.根据游戏时间间隔对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
159.在一些可选的实施例中,游戏世界更新单元404,可以用于若目标游戏更新数据为用户操作数据,根据用户操作数据进行模拟响应,以对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
160.在一些可选的实施例中,如图5所示,客户端游戏数据还可以包括游戏世界的游戏随机种子,游戏状态还原装置还可以包括随机数计算单元406,可以用于根据游戏随机种子,进行随机数生成计算,得到伪随机数;
161.游戏世界更新单元404,可以用于基于目标游戏更新数据和伪随机数,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
162.在一些可选的实施例中,游戏状态还原装置还可以包括游戏数据采集单元407,可以用于在实际游戏过程中,获取构建游戏世界的初始化参数,根据初始化参数构建游戏世界;
163.获取实际游戏过程中游戏世界的游戏数据,基于游戏数据对游戏世界进行更新,生成游戏更新数据序列;
164.将初始化参数和游戏更新数据序列存储为客户端游戏数据。
165.在一些可选的实施例中,游戏状态还原装置还可以包括更新时间计算单元,可以用于获取游戏世界的更新帧率;
166.根据更新帧率,计算游戏世界对应的更新时间间隔;
167.循环更新单元405,可以用于等待更新时间间隔,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止。
168.在一些可选的实施例中,游戏状态还原装置还可以包括故障原因确定单元408,可以用于获取游戏故障时间,从已还原的游戏服务端状态中,确定游戏故障时间对应的游戏服务端状态;
169.基于游戏服务端状态,对游戏进程进行故障调试,得到游戏故障时间对应的游戏故障原因。
170.由上可知,通过游戏状态还原装置,可以获取客户端游戏数据,客户端游戏数据包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列,根据初始化参数在服务端构建游戏世界,从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据,基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止;由于在本发明实施例中,根据在实际游戏过程中的初始化参数在服务端构建了游戏世界,以及,根据游戏过程中的数据对服务端中的游戏世界进行更新,因此,可以全面地还原游戏过程中服务端的状态,便于在游戏出现故障时,排查可能出现在游戏服务端的问题以及问题原因。
171.此外,相应的,本技术实施例还提供一种计算机设备,该计算机设备可以为终端。如图6所示,为本技术实施例提供的计算机设备的结构示意图。该计算机设备600包括有一个或者一个以上处理核心的处理器601、有一个或一个以上计算机可读存储介质的存储器602及存储在存储器602上并可在处理器上运行的计算机程序。其中,处理器601与存储器602电性连接。本领域技术人员可以理解,图6中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
172.处理器601是计算机设备600的控制中心,利用各种接口和线路连接整个计算机设备600的各个部分,通过运行或加载存储在存储器602内的软件程序和/或模块,以及调用存储在存储器602内的数据,执行计算机设备600的各种功能和处理数据,从而对计算机设备600进行整体监控。
173.在本技术实施例中,计算机设备600中的处理器601会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器602中,并由处理器601来运行存储在存储器602中的应用程序,从而实现各种功能:
174.获取客户端游戏数据,客户端游戏数据可以包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列;
175.根据初始化参数在服务端构建游戏世界;
176.从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据;
177.基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态;
178.返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止。
179.在一些可选的实施例中,基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,可以包括:
180.若目标游戏更新数据为游戏世界更新时间,获取游戏世界对应的当前游戏时间;
181.计算游戏世界更新时间和当前游戏时间之间的时间间隔;
182.根据游戏时间间隔对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
183.在一些可选的实施例中,基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,可以包括:
184.若目标游戏更新数据为用户操作数据,根据用户操作数据进行模拟响应,以对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
185.在一些可选的实施例中,客户端游戏数据还可以包括游戏世界的游戏随机种子;
186.基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态之前,本发明实施例提供的游戏状态还原方法还可以包括:
187.根据游戏随机种子,进行随机数生成计算,得到伪随机数;
188.基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,可以包括:
189.基于目标游戏更新数据和伪随机数,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
190.在一些可选的实施例中,获取客户端游戏数据之前,本发明实施例提供的游戏状态还原方法还可以包括:
191.在实际游戏过程中,获取构建游戏世界的初始化参数,根据初始化参数构建游戏世界;
192.获取实际游戏过程中游戏世界的游戏数据,基于游戏数据对游戏世界进行更新,生成游戏更新数据序列;
193.将初始化参数和游戏更新数据序列存储为客户端游戏数据。
194.在一些可选的实施例中,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤之前,本发明实施例提供的游戏状态还原方法还可以包括:
195.获取游戏世界的更新帧率;
196.根据更新帧率,计算游戏世界对应的更新时间间隔;
197.返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止,可以包括:
198.等待更新时间间隔,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止。
199.在一些可选的实施例中,本发明实施例提供的游戏状态还原方法还可以包括:
200.获取游戏故障时间,从已还原的游戏服务端状态中,确定游戏故障时间对应的游戏服务端状态;
201.基于游戏服务端状态,对游戏进程进行故障调试,得到游戏故障时间对应的游戏故障原因。
202.本方案可以获取客户端游戏数据,客户端游戏数据包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列,根据初始化参数在服务端构建游戏世界,从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据,基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止;由于在本发明实施例中,根据在实际游戏过程中的初始化参数在服务端构建了游戏世界,以及,根据游戏过程中的数据对服务端中的游戏世界进行更新,因此,可以全面地还原游戏过程中服务端的状态,便于在游戏出现故障时,排查可能出现在游戏服务端的问题以及问题原因。
203.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
204.可选的,如图6所示,计算机设备600还包括:触控显示屏603、射频电路604、音频电路605、输入单元606以及电源607。其中,处理器601分别与触控显示屏603、射频电路604、音频电路605、输入单元606以及电源607电性连接。本领域技术人员可以理解,图6中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
205.触控显示屏603可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏603可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(lcd,liquid crystal display)、有机发光二极管(oled,organic light-emitting diode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器601,并能接收处理器601发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器601以确定触摸事件的类型,随后处理器601根据触摸事件的类型在显示面板上提供相应的视觉输出。在本技术实施例中,可以将触控面板与显示面板集成到触控显示屏603而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏603也可以作为输入单元606的一部分实现输入功能。
206.射频电路604可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。
207.音频电路605可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路605可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路605接收后转换为音频数据,再将音频数据输出处理器601处理后,经射频电路604以发送给比如另一计算机设备,或者将音频数据输出至存储器602以便进一步处理。音频电路605还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。
208.输入单元606可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
209.电源607用于给计算机设备600的各个部件供电。可选的,电源607可以通过电源管理系统与处理器601逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源607还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
210.尽管图6中未示出,计算机设备600还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
211.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
212.由上可知,本实施例提供的计算机设备,可以获取客户端游戏数据,客户端游戏数据包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列,根据初始化参数在服务端构建游戏世界,从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据,基于目标游戏更新数据,对游戏世界进行更新,得到当前游
戏时间对应的游戏服务端状态,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止;由于在本发明实施例中,根据在实际游戏过程中的初始化参数在服务端构建了游戏世界,以及,根据游戏过程中的数据对服务端中的游戏世界进行更新,因此,可以全面地还原游戏过程中服务端的状态,便于在游戏出现故障时,排查可能出现在游戏服务端的问题以及问题原因。
213.本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
214.为此,本技术实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本技术实施例所提供的任一种游戏状态还原方法中的步骤。例如,该计算机程序可以执行如下步骤:
215.获取客户端游戏数据,客户端游戏数据可以包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列;
216.根据初始化参数在服务端构建游戏世界;
217.从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据;
218.基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态;
219.返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止。
220.在一些可选的实施例中,基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,可以包括:
221.若目标游戏更新数据为游戏世界更新时间,获取游戏世界对应的当前游戏时间;
222.计算游戏世界更新时间和当前游戏时间之间的时间间隔;
223.根据游戏时间间隔对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
224.在一些可选的实施例中,基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,可以包括:
225.若目标游戏更新数据为用户操作数据,根据用户操作数据进行模拟响应,以对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
226.在一些可选的实施例中,客户端游戏数据还可以包括游戏世界的游戏随机种子;
227.基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态之前,本发明实施例提供的游戏状态还原方法还可以包括:
228.根据游戏随机种子,进行随机数生成计算,得到伪随机数;
229.基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,可以包括:
230.基于目标游戏更新数据和伪随机数,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态。
231.在一些可选的实施例中,获取客户端游戏数据之前,本发明实施例提供的游戏状态还原方法还可以包括:
232.在实际游戏过程中,获取构建游戏世界的初始化参数,根据初始化参数构建游戏世界;
233.获取实际游戏过程中游戏世界的游戏数据,基于游戏数据对游戏世界进行更新,生成游戏更新数据序列;
234.将初始化参数和游戏更新数据序列存储为客户端游戏数据。
235.在一些可选的实施例中,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤之前,本发明实施例提供的游戏状态还原方法还可以包括:
236.获取游戏世界的更新帧率;
237.根据更新帧率,计算游戏世界对应的更新时间间隔;
238.返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止,可以包括:
239.等待更新时间间隔,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止。
240.在一些可选的实施例中,本发明实施例提供的游戏状态还原方法还可以包括:
241.获取游戏故障时间,从已还原的游戏服务端状态中,确定游戏故障时间对应的游戏服务端状态;
242.基于游戏服务端状态,对游戏进程进行故障调试,得到游戏故障时间对应的游戏故障原因。
243.本方案可获取客户端游戏数据,客户端游戏数据包括在客户端构建游戏世界时的初始化参数以及游戏世界对应的游戏更新数据序列,根据初始化参数在服务端构建游戏世界,从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据,基于目标游戏更新数据,对游戏世界进行更新,得到当前游戏时间对应的游戏服务端状态,返回执行从游戏更新数据序列中获取当前位于游戏更新数据序列首位的目标游戏更新数据的步骤,直到游戏更新数据序列中不存在游戏更新数据为止;由于在本发明实施例中,根据在实际游戏过程中的初始化参数在服务端构建了游戏世界,以及根据游戏过程中的数据对服务端中的游戏世界进行更新,因此,可以全面地还原游戏过程中服务端的状态,便于在游戏出现故障时,排查可能出现在游戏服务端的问题和问题原因。
244.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
245.其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
246.由于该存储介质中所存储的计算机程序,可以执行本技术实施例所提供的任一种游戏状态还原方法中的步骤,因此,可以实现本技术实施例所提供的任一种游戏状态还原方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
247.以上对本技术实施例所提供的一种游戏状态还原方法、装置、存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以
上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1