一种基于数据重演机制的网页游戏存档还原方法

文档序号:10618507阅读:479来源:国知局
一种基于数据重演机制的网页游戏存档还原方法
【专利摘要】一种基于数据重演机制的网页游戏存档还原方法,包括如下步骤:第一步:建立一个网页游戏存档还原结构框架,包括客户端和服务器端,客户端包括管理单元、鼠标事件收集单元、键盘事件收集单元、触摸事件收集单元、服务器通信单元;第二步:启动客户端,进入游戏主界面,判断该玩家是否为新玩家,若是则由服务器发送SSbegin至客户端;否则比较SSlast的时间戳是否小于事件日志文件中Elast的时间戳,若SSlast的时间戳小于Elast的时间戳,则执行数据重演,生成SSnew,更新SSlast为SSnew并发送SSlast至客户端;反之,则直接发送SSlast至客户端,玩家游戏过程中执行持续事件保护。本发明兼顾实时性和服务器低耗能。
【专利说明】
一种基于数据重演机制的网页游戏存档还原方法
技术领域
[0001]本发明涉及到网页游戏存档技术领域,特别是一种基于数据重演机制的网页游戏存档还原方法。
【背景技术】
[0002]网页游戏又称Web游戏,简称页游,通常无需下载客户端,可直接通过浏览器进行游戏。随着HTML5标准的推出,在多方面加强了Web技术,网页游戏也取得了长足的发展。网页游戏的存档一般通过与服务器通信保存相关游戏数据来实现。由于网页游戏运行的宿主环境在浏览器中,存在用户误操作、浏览器崩溃、操作系统关机等意外情况使网页关闭,这些意外情况将导致游戏进度丢失。目前,游戏界实现游戏存档主要有以下方案:
[0003]方案一:将游戏存档数据保存在客户端本地,安全性较差,一般适用于单机游戏。
[0004]方案二:通过玩家手动存档,将序列化的游戏存档数据保存在服务器端,待下次还原游戏场景时,再读取,反序列化为内存中的游戏数据。安全性较高,但不能做到实时存档。
[0005]方案三:通过与服务器建立全双工通信,将序列化的游戏存档数据实时保存在服务器端,待下次还原游戏场景时,再读取,反序列化为内存中的游戏数据。安全性较高,但对服务器性能要求高。
[0006]学术界就游戏存档相关的领域也进行了相关研究,乐金电子(中国)研究开发中心有限公司金松姬等人于2005年提出一种用于移动通信终端的游戏存储方法,采用基于自动存储定时器的自动存储方式和用户手动存储方式来实现移动通信终端上游戏进度的还原。深圳市快播有限公司王欣等人于2006年提出一种单机存档游戏系统,采用基于文件数据压缩、解压、tcp私有协议以及云存储的服务器保存方式和本地保存方式来实现单机游戏存档的同步,以使玩家可以在不同的游戏平台上运行同一单机游戏时,能从上次的游戏进度开始。奇智软件(北京)有限公司照肖勇等人于2012年提出一种Flash游戏存档的方法和装置,采用预设钩子函数获取Flash游戏存档事件,将存档备份包发送至服务器端解决单机版Flash游戏无法多进度存档和无法异地获取存档记录的问题。
[0007]以上关于游戏存档的相关研究中主要存在以下不足:手动存档不能做到实时,无法精准还原游戏进度。通过与服务器建立全双工通信方案,虽然在一定程度上实现了实时存档,但传输的数据量大,对服务器性能要求比较高,在游戏高并发情况下对服务器性能有所影响,另外如果客户端掉线,服务器端保存的用户数据状态在用户长时间未登录情况下也可能会出现自动内存回收的处理,导致临时状态数据被清空,影响数据的实时性。因此,现有的游戏存档相关研究还无法同时满足存档实时性和服务器低耗能的要求。

【发明内容】

[0008]为了克服已有游戏存档方法的实时性较差、精准度较低、服务器能耗较高的不足,本发明提出一种兼顾实时性和服务器低耗能的基于数据重演机制的网页游戏存档还原方法,数据重演机制是一项数据演化技术,包括持续事件保护和快照技术两部分;采用该机制,玩家无需保存游戏,若出现断电等异常情况,再次登入也可实现游戏数据的精准还原,本发明主要适用于基于HTML5和JavaScript技术搭建的网页游戏。
[0009 ]本发明解决其技术问题所采用的技术方案是:
[0010]—种基于数据重演机制的网页游戏存档还原方法,所述方法包括如下步骤:
[0011 ]第一步:建立一个网页游戏存档还原结构框架,包括客户端C和服务器端S,客户端C包括管理单元M、鼠标事件收集单元ME、键盘事件收集单元KE、触摸事件收集单元TE、服务器通信单元SC,g卩C={M,ME,TE,KE,SC};
[0012]M用于负责接收玩家输入的信息和请求,在用户登录游戏后,若玩家请求对某一游戏进度存档的下载,则将该请求发送给服务器并接收服务器发送的游戏进度至玩家;
[0013]ME用于负责收集玩家的鼠标事件;
[0014]TE用于负责收集玩家的触摸事件;
[0015]KE用于负责收集玩家的键盘事件;
[0016]SC用于负责与服务器通信;
[0017]第二步:根据所述网页游戏存档还原结构框架,过程如下:
[0018]步骤2.1:启动客户端,进入游戏主界面;
[0019]步骤2.2:服务器判断该玩家是否为新玩家,若为新玩家,则由服务器发送SSbegin至客户端,进行步骤2.3操作;若为老玩家,则比较SSlast的时间戳是否小于事件日志文件中Elast的时间戳,若SSlast的时间戳小于Elast的时间戳,则执行数据重演,生成SSne3w,将游戏快照SSiast更新为新生成的游戏快照SSne3w,,更新SSiast为SS.并发送SSiast至客户端。反之,则直接发送SSiast至客户端;
[0020]步骤2.3:玩家游戏过程中执行持续事件保护,即SC实时向S发送由ME、KE、TE记录玩家的鼠标事件、键盘事件、触摸事件,S将接收到的事件保存至内存中的事件队列中,并按照设定的时间间隔对内存事件队列进行持久化操作,将内存事件队列中的事件保存至服务器上的事件日志文件中,并清空内存事件队列中已经持久化的事件序列;若玩家游戏过程中,手动存档,则由SC发送SS_至S,S更新SSiast为SSn?。
[0021 ]进一步,所述步骤2.2)中,所述数据重演过程如下:
[0022]2.2.1)服务器加载SSlast,读取并还原游戏上下文环境中所需的游戏脚本文件,初始化游戏中元素的状态与属性,通过还原SSiast,以实现last时刻游戏状态机的初始化;
[0023]2.2.2)记331^的时间戳为8_1&8七^1^的时间戳为6_1&8七。将事件日志文件中起始时间Ss_last,截止时间为e_last的所有事件集合记为CEPS—laste-last;
[0024]2.2.3)游戏逻辑运算推演
[0025]根据持续事件保护机制进行游戏逻辑运算推演,每个GEI都拥有有限数目的离散稳定、相互独立又相互联系的状态,这些状态在事件的驱动下相互转移,组成GEI的有限状态机FSM,记为GEIm,GEIm是由若干个不同类别的GEI状态机所组成的集合,S卩GEIm= (GEI1M,GEI2M,…,GEIiM,…,GEIrW,其中,GEIm集合中的每一个GEIiM用于描述i这类游戏元素实体状态机在生命周期内响应输入事件所经历的状态变化,是i这类游戏元素实体的所有不同状态组成的集合,即GEIiM=WElV ,GElW" ,GElVr^GElVhGEIiM集合中每一个元素GE IV代表了该GE I iM所有状态中的某一个状态;
[0026]输入GEIm中的事件分为2种,一种是来自外部玩家输入的事件,即存在CEPS—laste-last中的E1,另一种是与游戏逻辑相关的固化在GEI1m内的事件函数,记为F1;
[0027]通过模拟持续事件保护队列中CEPS—iaste-last中的事件Ei以还原玩家在s_last时间戳之后的所有输入事件,E1输入到GEI1m中,激活固化在GEI1m游戏元素实体状态机中的某一个状态GElV内的事件函数F1,进行状态转换最终完成GEI1m的状态转移,实现游戏逻辑运算推演。
[0028]更进一步,所述步骤2.2.3)中,游戏逻辑运算推演分为以下4个步骤:
[0029]2.2.3.1):读取事件对象,事件分发器通过异步回调的方式读取CEPS—laste-last中的E1,并将E1W序列方式逐一分发至初始化的游戏状态机中进行推演;异步回调是指将事件函数E(i+i)作为输入参数传入事件函数Ei中,待Ei执行完后,再执行E(i+i);
[0030]2.2.3.2):分发事件对象,针对步骤一中单次事件对象的读取,事件分发器通过遍历每个GEI进行坐标碰撞检测,将事件E1*发至所作用的GEI;
[0031 ] 2.2.3.3):状态推演,GEIiM接收事件Ei的输入,开始GEIiM状态推演,触发游戏逻辑相关事件函数F1;事件函数?1可作为事件注入到GEI1m中,继续推演,也可作为事件注入到其他相关GEP+1M中产生连锁状态推演,直到连锁状态推演反应终止为止;
[0032]从开始符号到最近的结束符号代表来自CEPS—iaste-last中事件Ei输入到GEIiM中进行状态推演的过程。GEI1m接收事件E1输入后,触发游戏逻辑相关的事件函数F1,可作为事件注入到GEI1m中的其他状态GEIV继续进行推演,也可作为事件注入到其他相关的游戏元素实体状态机GEIi+1M中产生连锁状态推演,直到连锁状态推演终止为止。以上过程为模拟玩家事件E1所完成的所有操作,最终达到游戏状态机的状态转化;
[0033]2.2.3.4):对于CEPS—iaste-last中的所有事件,依次执行步骤2.2.3.I)至步2.2.3.3),最终推演到用户在游戏崩溃前的最后一个事件,此时形成的游戏数据即为用户的最终游戏状态,据以此实现无存档环境下的游戏数据的精准还原。
[0034]再进一步,所述步骤2.2)中,快照更新包括以下3中情况:
[0035](a)玩家首次注册游戏时,S生成SSbegin并发送至C,此时SSbegin即为SSlast;
[0036](b)玩家在游戏过程中手动存档,发送SSnciw至S,S更新快照,此时SSnciw即为SSlast;
[0037](c)玩家登入时,S比较SSlast时间戳与事件日志中Elast时间戳,若SSlast时间戳小于Elast时间戳,则启动数据重演机制,在SSlast的基础上,模拟玩家的游戏行为,生成SSne3w,更新SSiast,此时 SSnew 即为 SSiast。
[0038]本发明的技术构思为:现有网页游戏主要通过用户的鼠标事件、键盘事件、触摸事件的输入来实现游戏逻辑。根据现有网页游戏的事件交互方式,本方法采用数据重演机制来实现网页游戏存档还原,包括基于持续事件保护机制和快照技术方法,即通过快照技术获取用户最后一个时间点的存档,基于持续事件保护机制获取用户在客户端游戏过程的所有输入。在游戏发生异常后,采用的数据重演机制基于快照还原出最后一次存档时所有的游戏数据,再根据持续事件保护机制来进行游戏运算推演,模拟玩家在快照时间节点之后的所以输入动作,动作以序列方式逐一输入至游戏环境中进行推演,最后将游戏环境推演到用户在游戏崩溃前的最后一个动作,此时形成的数据即用户的最终游戏状态,据以此实现无存档环境下的游戏数据精准还原。
[0039]本发明提出的数据重演机制是基于持续事件保护和快照技术两部分的,为便于论述,给出如下定义。
[0040]定义1:事件(Event,E)是指由{Time,Type ,Key}组成的三元组,即E= {Time ,Type,Key},其中Time指本次事件产生的时间,精确到毫秒;Type指本次事件的类型,包括鼠标点击事件,键盘点击事件,触摸事件;Key指本次事件所作用的对象,包括鼠标被点击的坐标、键盘被点击的按键、玩豕触?旲屏蒂的坐标O
[0041]定义2:Εη指在η时刻所发生的事件。η为last时,Eiast指最近一次事件。
[0042]定义3:持续事件保护(Continuous Event Protect1n,CEP)指将玩家在游戏过程中的每一次鼠标事件和键盘事件记录并备份至服务器的事件日志文件中,是由E按照时间顺序所组成的序列,即CEP1lastME1 ,E2,…,Elast>表示起始时间为I,截止时间为last的所有事件集合。
[0043]定义4:快照(Snapshot,SS)指基于某个时间点的游戏环境的备份。
[0044]SSn指在η时刻的游戏快照。
[0(Μ5] η为begin时,SSbegin指初始化游戏快照。
[0046]η为now时,SSn?指当前游戏快照。
[0047]η为last时,SSiast指最近一次游戏快照。
[0048]η为new时,SSnew指最新的游戏快照。
[0049]定义5:数据重演(Data Replay,DP)是指玩家登入游戏时,若服务器端检测到SSiast的时间比事件日志文件中Eiast时间小,则由服务器端读取事件日志中SSiast的时间点至Elast的时间点所记录的鼠标事件与键盘事件序列,在SSlast的基础上通过模拟玩家的游戏行为生成下次登入时游戏的快照。
[°°50] 定义6:游戏元素(Game Element,GE)指地图、主角、技能、道具、剧情、NPC(Non-Player-Controlled Character)等组成游戏的元素。游戏元素的实例被称为游戏元素实体(Game Element Instance,GEI) <ΧΕΙ由不同游戏元素实体组成的集合,即GEI = {GEI1,GEI2,...,GEIi,...,GEIn1
[0051 ]本发明的有益效果主要表现在:(I)客户端与服务器端保持全双工通信,由于采用持续事件保护,发送至服务器端的数据量小,减轻服务器的压力。(2)服务器端根据持续事件保护和快照技术实现了在任何异常情况下退出后的游戏进度的精准还原。
【附图说明】
[0052]图1是基于本方法的网页游戏存档还原结构框架图。
[0053]图2是基于本方法客户端加载游戏快照流程图。
[0054]图3a是数据重演流程图。
[0055]图3b是游戏逻辑运算推演图。
[0056]图4是快照更新流程图。
【具体实施方式】
[0057]下面结合附图对本发明作进一步描述。
[0058]参照图1?图4,一种基于数据重演机制的网页游戏存档还原方法,包括如下步骤:
[0059]第一步:根据本方法构思,建立一个网页游戏存档还原结构框架如图1所示,包括客户端(Client,C)和服务器端(Server,S)。C包括管理单元(Management,M)、鼠标事件收集单元(Mouse Event,ME)、键盘事件收集单元(Keyboard Event,KE)、触摸事件收集单元(Touch Event,TE)、服务器通信单元(Server Communicat1n,SC),即C= {M,ME,TE,KE,SC}。
[0060]M负责接收玩家输入的信息和请求。在用户登录游戏后,若玩家请求对某一游戏进度存档的下载,则将该请求发送给服务器并接收服务器发送的游戏进度至玩家。
[0061 ] ME负责收集玩家的鼠标事件。
[0062]TE负责收集玩家的触摸事件。
[0063]KE负责收集玩家的键盘事件。
[0064]SC负责与服务器通信。
[0065]第二步:根据所述网页游戏存档还原结构框架,过程如下:
[0066]步骤2.1:启动客户端,进入游戏主界面。
[0067]步骤2.2:服务器判断该玩家是否为新玩家,若为新玩家,则由服务器发送SSbegin至客户端,进行步骤2.3操作;若为老玩家,则比较SSlast的时间戳是否小于事件日志文件中Elast的时间戳,若SSlast的时间戳小于Elast的时间戳,则执行数据重演,生成SSnew,更新SSlast为SSnew并发送SSiast至客户端。反之,则直接发送SSiast至客户端。
[0068]其中,以上所述数据重演过程如图3a所示。
[0069]2.2.1)服务器加载SSlast,读取并还原游戏上下文环境中所需的游戏脚本文件,初始化游戏中元素的状态与属性,例如人物的位置信息、血量等。通过还原SSiast,以实现last时刻游戏状态机的初始化。
[0070]2.2.2)记331_的时间戳为8_1&8七^1_的时间戳为6_1&8七。将事件日志文件中起始时间Ss_last,截止时间为e_last的所有事件集合记为CEPS—laste-last。
[0071]2.2.3)游戏逻辑运算推演
[0072]根据持续事件保护机制进行游戏逻辑运算推演,图3a中游戏逻辑运算推演环节中的带箭头圆弧代表对GEIm进行游戏逻辑推演,推演流程由图3b进行细化描述。每个GEI都拥有有限数目的离散稳定、相互独立又相互联系的状态,这些状态在事件的驱动下相互转移,组成GEI的有限状态机(Finite state machines,FSM),记为GEIm,GEIm是由若干个不同类别的GEI状态机所组成的集合,即GEIm= {GElVGElV…,GEIiM,…,GEFm}。其中,GEIm集合中的每一个GEI1m用于描述i这类游戏元素实体状态机在生命周期内响应输入事件所经历的状态变化,是i这类游戏元素实体的所有不同状态组成的集合,即GEI1m= {GElV ,GEI1M2,…,GE I V,...,GE I V} ,GEIiM集合中每一个元素GE IV代表了该GE I iM所有状态中的某一个状态。
[0073]需要注意的是,输入GEIm中的事件分为2种,一种是来自外部玩家输入的事件,SP存在CEPS—laste-last中的E1,另一种是与游戏逻辑相关的固化在GEI1m内的事件函数,记为K。
[0074]通过模拟持续事件保护队列中CEPS—iaste-last中的事件Ei以还原玩家在s_last时间戳之后的所有输入事件,E1输入到GEI1m中,激活固化在GEI1m游戏元素实体状态机中的某一个状态GElV内的事件函数F1,进行状态转换最终完成GEI1m的状态转移,最终达到游戏逻辑运算推演的目的。
[0075]游戏逻辑运算推演主要分为以下4个步骤:
[0076]2.2.3.1):读取事件对象。事件分发器通过异步回调的方式读取CEPS—laste-last中的E1,并将E1以序列方式逐一分发至初始化的游戏状态机中进行推演。异步回调是指将事件函数E(i+i)作为输入参数传入事件函数Ei中,待Ei执行完后,再执行E(i+i)。
[0077]2.2.3.2):分发事件对象。针对步骤一中单次事件对象的读取,事件分发器通过遍历每个GEI进行坐标碰撞检测,将事件E1*发至所作用的GEI。
[0078]2.2.3.3):状态推演。GEIiM接收事件Ei的输入,开始GEIiM状态推演,触发游戏逻辑相关事件函数Fi。事件函数Fi可作为事件注入到GEIiM中,继续推演,也可作为事件注入到其他相关GEI1+1m中产生连锁状态推演,直到连锁状态推演反应终止为止。图3b中每一个大圆代表i这类游戏元素实体状态的集合,即GEI1m,其中GEI1m中的每个小圆代表i这类游戏元素实体的状态集合中的某个状态,即GEI1m^从开始符号到最近的结束符号代表来自CEPS—iaste-last中事件Ei输入到GEIiM中进行状态推演的过程。GEIiM接收事件Ei输入后,触发游戏逻辑相关的事件函数?,,可作为事件注入到GEI1m中的其他状态GEIV继续进行推演,也可作为事件注入到其他相关的游戏元素实体状态机GEP+1M中产生连锁状态推演,直到连锁状态推演终止为止。以上过程为模拟玩家事件E1所完成的所有操作,最终达到游戏状态机的状态转化。
[0079]2.2.3.4):对于 CEPS—iaste-last 中的所有事件,依次执行 2.2.3.1)至步 2.2.3.3),最终推演到用户在游戏崩溃前的最后一个事件,此时形成的游戏数据即为用户的最终游戏状态,据以此实现无存档环境下的游戏数据的精准还原。
[0080]步骤2.3:玩家游戏过程中执行持续事件保护,即SC实时向S发送由ME、KE、TE记录玩家的鼠标事件、键盘事件、触摸事件,S将接收到的事件保存至内存中的事件队列中,并按照一定的时间间隔对内存事件队列进行持久化操作,将内存事件队列中的事件保存至服务器上的事件日志文件中,并清空内存事件队列中已经持久化的事件序列。若玩家游戏过程中,手动存档,则由SC发送SS_至S,S更新SSiast为SSn?。
[0081 ]其中,以上所述快照更新总结为以下3种情况:
[0082](b)玩家首次注册游戏时,S生成SSbegin并发送至C,此时SSbegin即为SSiast。
[0083 ] (b)玩家在游戏过程中手动存档,发送SS_至S,S更新快照,此时SS_即为SSlast。
[0084](c)玩家登入时,S比较SSlast时间戳与事件日志中Elast时间戳,若SSlast时间戳小于Elast时间戳,则启动数据重演机制,在SSlast的基础上,模拟玩家的游戏行为,生成SSne3w,更新SSiast,此时 SSnew 即为 SSiast。
[0085]实例2:玩家在早上8点整的时候,注册进入游戏,服务器检测到该游戏玩家为新用户,没有历史快照的存在,于是发送初始化快照至客户端。客户端加载初始化快照后初始化游戏,在玩家玩的整个过程中,实时向服务器发送玩家的鼠标事件、键盘事件或者是触摸事件,服务器将接收到的事件保存至事件日志文件中,玩家在10点50的时候,手动保存了游戏进度,更新了服务器的历史快照,玩家玩到了 11点整时,由于系统死机导致游戏崩溃。
[0086]11点10分时,玩家重启电脑登入游戏,服务器端检测到最近一次游戏快照的时间为1点50分,事件日志文件中最后一次事件的时间为1点59分34秒,由于快照的时间小于日志文件中最后一次事件的时间,服务器端启动数据重演机制,加载10点50分的历史快照,读取事件日志中10点50分后的所有事件,通过模拟玩家的事件行为来还原11点整时的游戏环境。
[0087]10点51分45秒的时候,玩家对某个坐标进行鼠标左键单击操作ElQh51m45s,事件分发器读取E1Qh51m45s并分发至游戏主角状态机,游戏主角状态机接收该事件,触发固化在游戏主角状态机内的自动寻路函数FAut_tid\foVe(roie),AutomaticMove(roIe)为自动寻路的函数名,role为传入自动寻路函数的游戏主角对象,自动寻路函数将在有障碍物的情况下根据实现主角当前位置以及对应的鼠标坐标,执行自动寻路。由于FAUt_tid\fove(role:l只作用于游戏主角状态机,没有触发其他GEI1M连锁状态推演,更新游戏主角的坐标,完成了El0h51m45s的游戏逻辑运算推演。
[0088]事件分发器再次读取10点51分55秒时刻的事件,玩家对NPC进行了普通攻击操作,事件分发器将E1Qh51m55s分发至游戏主角状态机,游戏主角状态机接收该事件,触发固化在游戏主角状态机内的攻击函数Fattack(roie,npc),attack(role,npc)为攻击函数名,其中,role为攻击对象即游戏主角对象,npc为被攻击对象即为敌方npc对象。由于FattacMrole, npcO关联了NPC实体状态机,产生连锁状态推演,FattacMrole.np。)引发NPC状态机的状态转换,直至游戏主角状态机、NPC实体状态机都完成状态更新,完成了E1Qh5ImW的游戏逻辑运算推演。
[0089]以此类推,直到事件分发器读取到最后一个事件,生成SSnew,SSnew更新SSlast发送SSiast至客户端。客户端接收SSiast还原游戏进度,玩家继续游戏。
【主权项】
1.一种基于数据重演机制的网页游戏存档还原方法,其特征在于:所述方法包括如下步骤: 第一步:建立一个网页游戏存档还原结构框架,包括客户端C和服务器端S,客户端C包括管理单元M、鼠标事件收集单元ME、键盘事件收集单元KE、触摸事件收集单元TE、服务器通信单元SC,g卩C={M,ME,TE,KE,SC}; M用于负责接收玩家输入的信息和请求,在用户登录游戏后,若玩家请求对某一游戏进度存档的下载,则将该请求发送给服务器并接收服务器发送的游戏进度至玩家; ME用于负责收集玩家的鼠标事件; TE用于负责收集玩家的触摸事件; KE用于负责收集玩家的键盘事件; SC用于负责与服务器通信; 第二步:根据所述网页游戏存档还原结构框架,过程如下: 步骤2.1:启动客户端,进入游戏主界面; 步骤2.2:服务器判断该玩家是否为新玩家,若为新玩家,则由服务器发送SSbegin至客户端,进行步骤2.3操作;若为老玩家,则比较SSlast的时间戳是否小于事件日志文件中Elast的时间戳,若SSlast的时间戳小于Elast的时间戳,则执行数据重演,生成SSnew,将游戏快照SSlast更新为新生成的游戏快照SSne3w,更新SSlast为SSne3w并发送SSlast至客户端。反之,则直接发送SSiast至客户端; 步骤2.3:玩家游戏过程中执行持续事件保护,S卩SC实时向S发送由ME、KE、TE记录玩家的鼠标事件、键盘事件、触摸事件,S将接收到的事件保存至内存中的事件队列中,并按照设定的时间间隔对内存事件队列进行持久化操作,将内存事件队列中的事件保存至服务器上的事件日志文件中,并清空内存事件队列中已经持久化的事件序列;若玩家游戏过程中,手动存档,则由SC发送SS_至S,S更新SSiast为SSn?。2.如权利要求1所述的一种基于数据重演机制的网页游戏存档还原方法,其特征在于:所述步骤2.2)中,所述数据重演过程如下: 2.2.1)服务器加载SSlast,读取并还原游戏上下文环境中所需的游戏脚本文件,初始化游戏中元素的状态与属性,通过还原SSiast,以实现last时刻游戏状态机的初始化; 2.2.2)记331_的时间戳为8_1&8〖^1_的时间戳为6_1&8〖。将事件日志文件中起始时间为s_last,截止时间为e_last的所有事件集合记为CEPS—laste-last; 2.2.3)游戏逻辑运算推演 根据持续事件保护机制进行游戏逻辑运算推演,每个GEI都拥有有限数目的离散稳定、相互独立又相互联系的状态,这些状态在事件的驱动下相互转移,组成GEI的有限状态机FSM,记为GEIm,GEIm是由若干个不同类别的GEI状态机所组成的集合,即GEIM=WEIiM,GEI2M,…,GEIiM,…,GEIrW,其中,GEIm集合中的每一个GEIiM用于描述i这类游戏元素实体状态机在生命周期内响应输入事件所经历的状态变化,是i这类游戏元素实体的所有不同状态组成的集合,即GEIiM=WElV ,GElW" ,GElVr^GElVhGEIiM集合中每一个元素GE IV代表了该GE I iM所有状态中的某一个状态; 输入GEIm中的事件分为2种,一种是来自外部玩家输入的事件,即存在CEPs-1aste^last中的E1,另一种是与游戏逻辑相关的固化在GEI1m内的事件函数,记为F1; 通过模拟持续事件保护队列中CEPS—中的事件E1以还原玩家在s_last时间戳之后的所有输入事件,E1输入到GEI1m中,激活固化在GEI1m游戏元素实体状态机中的某一个状态GElV内的事件函数Fi,进行状态转换最终完成GEIiM的状态转移,实现游戏逻辑运算推演。3.如权利要求2所述的一种基于数据重演机制的网页游戏存档还原方法,其特征在于:所述步骤2.2.3)中,游戏逻辑运算推演分为以下4个步骤: 2.2.3.1):读取事件对象,事件分发器通过异步回调的方式读取CEPS—laste-last中的E1,并将E1W序列方式逐一分发至初始化的游戏状态机中进行推演;异步回调是指将事件函数E(i+i)作为输入参数传入事件函数Ei中,待Ei执行完后,再执行E(i+i); 2.2.3.2):分发事件对象,针对步骤一中单次事件对象的读取,事件分发器通过遍历每个GEI进行坐标碰撞检测,将事件E1*发至所作用的GEI; 2.2.3.3):状态推演,GEIiM接收事件Ei的输入,开始GEI iM状态推演,触发游戏逻辑相关事件函数Fi;事件函数Fi可作为事件注入到GEIiM中,继续推演,也可作为事件注入到其他相关GEP+1M中产生连锁状态推演,直到连锁状态推演反应终止为止; 从开始符号到最近的结束符号代表来自CEPs-1aste^last中事件Ei输入到GEIiM中进行状态推演的过程。GEI1m接收事件E1输入后,触发游戏逻辑相关的事件函数F1,可作为事件注入到GEI1m中的其他状态GEIV继续进行推演,也可作为事件注入到其他相关的游戏元素实体状态机GEIi+1M中产生连锁状态推演,直到连锁状态推演终止为止。以上过程为模拟玩家事件Ei所完成的所有操作,最终达到游戏状态机的状态转化; 2.2.3.4):对于CEPS—iaste-last中的所有事件,依次执行步骤2.2.3.1)至步2.2.3.3),最终推演到用户在游戏崩溃前的最后一个事件,此时形成的游戏数据即为用户的最终游戏状态,据以此实现无存档环境下的游戏数据的精准还原。4.如权利要求1?3之一所述的一种基于数据重演机制的网页游戏存档还原方法,其特征在于:所述步骤2.2)中,快照更新包括以下3中情况: (a)玩家首次注册游戏时,S生成SSbegin并发送至C,此时SSbegin即为SSiast; (b)玩家在游戏过程中手动存档,发送SS_至S,S更新快照,此时SS_即为SSlast; (c)玩家登入时,S比较SSlast时间戳与事件日志中Elast时间戳,若SSlast时间戳小于Elast时间戳,则启动数据重演机制,在SSlast的基础上,模拟玩家的游戏行为,生成SSne3w,更新SSiast,此时 SSnew 即为 SSiast。
【文档编号】A63F13/79GK105999702SQ201610343237
【公开日】2016年10月12日
【申请日】2016年5月23日
【发明人】陆佳炜, 马俊, 赵泓茗, 黄翔, 芦楠, 卢成炳
【申请人】浙江工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1