游戏动画的渲染方法和装置、存储介质、电子装置与流程

文档序号:17548158发布日期:2019-04-30 18:00阅读:168来源:国知局
游戏动画的渲染方法和装置、存储介质、电子装置与流程

本发明涉及互联网领域,具体而言,涉及一种游戏动画的渲染方法和装置、存储介质、电子装置。



背景技术:

网页游戏又称web游戏,属于无端网游,简称页游,是基于web浏览器的在线多人互动网络游戏,无需下载客户端,不存在机器配置不够的问题,最重要的是关闭或者切换极其方便。web游戏大概分为两种类型:一是基于web浏览器,使用php/asp/perl等解释语言建设的虚拟社区;二是基于web浏览器,使用flash/java技术制作的游戏。

随着互联网的发展,手机互联网已经逐步成为了互联网的主要发展方向。web游戏从这个意义上看是专门为未来手机互联网时代准备的,许多已经流行的应用、游戏,都已经有了web手机化的应用,那么web游戏走进手机互联网应该也会逐步普及。

在目前的web手机游戏运行的过程中,当用户在web客户端进行游戏操作时,由web客户端所在的线程进行游戏处理和画面渲染,具体而言是先根据游戏操作,利用游戏逻辑计算出渲染数据,然后利用渲染数据渲染出游戏帧画面,在渲染的过程中,始终需要等待渲染数据准备好了才会进行渲染,从而造成了游戏处理的效率较低,得到的游戏画面的帧率(即单位时间内的画面帧数)较低。

针对相关技术中游戏画面的帧率较低的技术问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种游戏动画的渲染方法和装置、存储介质、电子装置,以至少解决相关技术中游戏画面的帧率较低的技术问题。

根据本发明实施例的一个方面,提供了一种游戏动画的渲染方法,该方法包括:在客户端上获取对目标游戏的操作指令,目标游戏为在支持网页环境的客户端中运行的网页游戏;获取操作指令在目标游戏中指示执行的游戏任务;通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,多个线程为用于运行目标游戏的线程。

根据本发明实施例的另一方面,还提供了一种游戏动画的渲染装置,该装置包括:第一获取单元,用于在客户端上获取对目标游戏的操作指令,目标游戏为在支持网页环境的客户端中运行的网页游戏;第二获取单元,用于获取操作指令在目标游戏中指示执行的游戏任务;渲染单元,用于通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,多个线程为用于运行目标游戏的线程。

在本发明实施例中,在客户端上获取对目标游戏(为在支持网页环境的客户端中运行的网页游戏)的操作指令,获取操作指令在目标游戏中指示执行的游戏任务;通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,由于多个线程是并行运行,可以解决相关技术中游戏画面的帧率较低的技术问题,进而达到提高游戏画面的帧率的技术效果。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的游戏动画的渲染方法的硬件环境的示意图;

图2是根据本发明实施例的一种可选的游戏动画的渲染方法的流程图;

图3是根据本发明实施例的一种可选的游戏逻辑拆解的示意图;

图4是根据本发明实施例的一种可选的线程功能的示意图;

图5是根据本发明实施例的一种可选的线程功能的示意图;

图6是根据本发明实施例的一种可选的游戏画面帧数的示意图;

图7是根据本发明实施例的一种可选的游戏动画的渲染装置的示意图;

图8是根据本发明实施例的一种可选的游戏画面的示意图;以及

图9是根据本发明实施例的一种终端的结构框图。

具体实施方式

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

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

首先,在对本发明实施例进行描述的过程中出现的部分名词或者术语适用于如下解释:

web:web(worldwideweb)即全球广域网,也称为万维网,它是一种基于超文本和http的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在internet上的一种网络服务,为浏览者在internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将internet上的信息节点组织成一个互为关联的网状结构。

根据本发明实施例,提供了一种游戏动画的渲染方法的方法实施例。

可选地,在本实施例中,上述游戏动画的渲染方法可以应用于如图1所示的由服务器102和终端104所构成的硬件环境中。如图1所示,服务器102通过网络与终端104进行连接,上述网络包括但不限于:广域网、城域网或局域网,终端104并不限定于pc、手机、平板电脑等。本发明实施例的游戏动画的渲染方法可以由服务器102来执行,也可以由终端104来执行,还可以是由服务器102和终端104共同执行。其中,终端104执行本发明实施例的游戏动画的渲染方法也可以是由安装在其上的客户端来执行。

图2是根据本发明实施例的一种可选的游戏动画的渲染方法的流程图,如图2所示,该方法可以包括以下步骤:

步骤s202,在客户端上获取对目标游戏的操作指令,目标游戏为在支持网页环境(如web环境)的客户端中运行的网页游戏(如web游戏)。

上述的客户端为支持网页环境的客户端,包括但不局限于:web浏览器,支持web功能的社交应用、即时通讯应用、视频应用、音乐应用、输入法应用。

上述的目标游戏即在客户端中运行的游戏,包括但不局限于:单机游戏、网络在线游戏、角色扮演游戏rpg(role-playinggame)、动作游戏act(actiongame)、冒险游戏avg(adventuregame)、第一人称视角射击游戏fps(firstpersonalshootinggame)、第三人称射击类游戏tps(thirdpersonalshootinggame)、格斗游戏ftg(fightinggame)、多人在线战术竞技游戏moba(multiplayeronlinebattlearena)、卡牌游戏cag(cardgame)、即时战略游戏rts(real-timestrategygame)。

上述的操作指令即由游戏参与者发出的用于对目标游戏角色进行游戏任务的指示的指令,如在射击游戏中,指示射击者进行移动的移动指令、指示射击者进行射击的射击指令。

步骤s204,获取操作指令在目标游戏中指示执行的游戏任务。

在游戏的游戏逻辑中,已经预先建立有操作指令与游戏任务的对应关系,步骤s204即根据当前接收到的操作指令查找对应的游戏任务,如在射击游戏中,查找与移动指令的移动任务(射击者进行移动的任务)、查找与射击指令对应的射击任务(射击者进行射击的任务)。

步骤s206,通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,多个线程为用于运行目标游戏的线程。

相关技术中,在接收到游戏任务时,是有客户端所在的线程统一进行处理,包括串行处理游戏逻辑和游戏渲染,一般而言,游戏逻辑比较复杂,每一次循环中游戏逻辑需要消耗的时间比较长,而游戏渲染需要等待较长时间,对于游戏逻辑的处理而言,每一次循环过程中也需要等待渲染完成之后才进行,从而使得每次循环需要花费较长时间,造成游戏画面的帧率较低。

在上述步骤s206中,多个线程基于游戏任务并行运行在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画时,部分线程处理游戏任务的游戏逻辑、部分线程进行游戏动画的渲染,对于处理游戏逻辑的线程而言,可以连续不断的根据游戏任务执行游戏逻辑得到待渲染的数据(即第一数据),而无需等待每一次循环中的游戏渲染结束,而对于处理游戏渲染的线程而言,可以连续不断的根据得到的待渲染的数据进行游戏动画的渲染,而不用等待游戏逻辑处理的结束。

相较于单个线程而言,对于处理游戏逻辑的线程而言,无需等待游戏渲染的结束,可以一直进行游戏逻辑的处理,使得单位时间内得到的待渲染的数据更多;对于处理游戏渲染的线程而言,无需等待游戏逻辑处理的结束,可以一直进行游戏渲染的处理,使得单位时间内渲染出画面的数量更多。

通过上述步骤s202至步骤s206,在客户端上获取对目标游戏(如在支持web环境的客户端中运行的web游戏)的操作指令,获取操作指令在目标游戏中指示执行的游戏任务;通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,由于多个线程是并行运行,可以解决了相关技术中游戏画面的帧率较低的技术问题,进而达到提高游戏画面的帧率的技术效果。

下面结合图2所示的步骤进一步详述本申请的实施例:

在步骤s202提供的技术方案中,在客户端上获取对目标游戏的操作指令,目标游戏可为在支持web环境的客户端中运行的web游戏。

当游戏参与者在客户端中进行游戏操作时,移动终端(即安装上述的客户端的终端)会实时监测游戏输入设备(如手柄、鼠标、键盘、触摸屏、手势识别装置)上的操作事件,在移动终端上检测到操作事件的情况下,在客户端上获取与操作事件对应的操作指令。

如在射击游戏中,当游戏参与者在客户端中点击“移动按钮”时,操作指令即为与“移动按钮”对应的移动指令,当游戏参与者在客户端中点击“射击按钮”时,操作指令即为与“射击按钮”对应的射击指令。

在步骤s204提供的技术方案中,获取操作指令在目标游戏中指示执行的游戏任务。

如在射击游戏中,查找与移动指令的移动任务(指示游戏中的角色射击者进行移动的任务)、查找与射击指令对应的射击任务(指示游戏中的角色射击者进行射击的任务)。

在步骤s206提供的技术方案中,通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,多个线程为用于运行目标游戏的线程。

上述的通过多个线程基于游戏任务并行运行主要是指:通过多个线程并行执行游戏任务和与游戏任务对应的渲染任务,渲染任务用于根据执行游戏任务得到的数据在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画。

上述的用于执行游戏任务的线程为第一线程,用于执行渲染任务的线程为第二线程,第二线程可以为客户端的ui线程,第一线程为worker线程,下面结合以下步骤进行详述:

步骤s11,通过多个线程并行执行游戏任务和与游戏任务对应的渲染任务之前,获取客户端的标识信息,标识信息用于指示客户端是否支持多线程运行,具体而言,标识信息为用于标识是否支持worker线程的信息。

如客户端为浏览器而言,一般较低版本的浏览器不支持worker线程,而较高版本则支持worker线程,因此此处的标识信息可以为浏览器的版本信息。

再如客户端为社交应用等非浏览器类型的应用时,应用的相关信息(如日志、应用介绍等)中会说明是否支持worker线程,则标识信息即上述的应用的相关信息。webworker是运行在后台的javascript,独立于其他脚本,不会影响页面的性能,在客户端做任何其它事情(如点击、选取内容等等)时,而此时webworker在后台运行,互不干扰,也不会影响web客户端的性能。

步骤s12,在标识信息指示客户端支持多线程运行的情况下,通过执行用于创建第一线程的javascript代码,创建用于执行游戏任务的第一线程。

步骤s13,在通过多个线程并行执行游戏任务和与游戏任务对应的渲染任务时,通过多个线程中的第一线程执行与游戏任务对应的游戏逻辑,得到第一数据,一个或多个第一数据用于在客户端中渲染出游戏动画中的游戏画面帧。

可选地,上述的第一线程可以为多个,在游戏任务为多个的情况下,通过多个第一线程并行执行多个游戏任务。此处的“多个第一线程并行执行多个游戏任务”包括以下两种情况:

(1)每个第一线程处理一个游戏任务;

(2)多个第一线程处理一个游戏任务。

对于上述的第二种情况,可以通过如下方式实现:

如图3所示:考虑到游戏逻辑的处理占据了较长时间,可把游戏中的重度复杂逻辑进行碎片化,拆解成几个比较独立的子逻辑模块,分散到多个动画帧来运算,每帧处理一个子逻辑,避免阻塞在某一帧,由多个第一线程处理得到的第一数据为第二线程绘制ui提供服务。

需要说明的是:1)对重度逻辑进行拆解,需要每个子逻辑是比较独立的逻辑运算;2)把重度逻辑拆解出来的几个子逻辑虽然是比较独立的,但是这个几个子逻辑可能是存在有联系的,考虑到子逻辑之间可能存在数据相关性,可设置额外的状态机来维持子逻辑间的联系,以达到拆解之前的整体逻辑效果。

若拆解重度逻辑存在以下问题:1)在某些情况下,原本的重度逻辑可能是依托于某个算法框架进行搭建的,如果进行拆解,避免不了进行算法的修改,这样一来就破坏了算法的整体性,维护起来也是特别麻烦的;2)不是所有情况下都适合拆解,如果原本的重度逻辑本身就是强联系强耦合的,这种情况下拆解的难度是十分高的,甚至是无法拆解的。

为了不破坏逻辑的整体连贯性,便于维护,则可以采用上述的第一种情况,不需要进行逻辑拆解,把游戏逻辑的处理放到另外一个线程上,与主ui线程并行处理,同样也达到了避免ui阻塞的效果。

步骤s14,在第一线程执行任务的同时,通过多个线程中的第二线程执行渲染任务,以利用第一数据逐帧渲染出游戏动画中的游戏画面。

步骤s15,在通过多个线程并行执行游戏任务和与游戏任务对应的渲染任务时,第一线程与第二线程采用异步通讯的方式进行通讯。

第一线程在得到第一数据之后,将第一数据采用异步消息的方式传输至消息队列进行保存,消息队列专用于为第二线程保存待处理的第一数据。

第二线程实时检测消息队列中是否存在第一数据,在消息队列中存在第一数据的情况下,读取第一数据并执行渲染任务。

在本申请的技术方案中,主要是使用了webworker技术对web游戏的流畅度进行优化,提升游戏fps(每秒输出的游戏画面帧)。由于web游戏依托于javascript脚本在浏览器上运行,一方面javascript语言本身存在明显的运行性能弊端,另外一方面javascript语言是单线程语言,传统的做法下游戏逻辑运算和ui渲染处于同一线程,重度复杂的游戏逻辑运算会阻塞ui渲染造成游戏卡顿问题。webworker提供了一种创建worker线程的简单方法,允许在worker线程下处理计算密集任务而不影响主ui线程。本发明使用webworker技术把复杂重度的逻辑运算抽离出来放到worker线程下运行,和主ui线程进行分离,然后在主ui线程和worker线程之间建立交互模型。解决了重度复杂的逻辑运算阻塞主ui线程而造成的游戏画面卡顿问题,保证了游戏渲染帧率的稳定,从而保证web游戏整体的流畅运行。

作为一种可选的实施例,下面结合图4详述本申请的实施例。

如图4所示,在本申请的技术方案中,利用webworker技术新开了一个worker线程,把重度游戏逻辑运算放到worker线程,与主ui线程并行处理,主ui线程和worker线程直接通过消息机制进行交互。每次有输入操作,主ui线程进行处理后发送消息(如通过postmessage发送游戏任务)给worker线程执行相应的逻辑,发送消息以后,主ui线程继续往下执行。worker线程收到命令消息执行逻辑运算,运算过程中产生动画数据(第一数据)立即通过消息方式发送给主ui线程,主ui线程每帧查询动画数据队列,发现有动画数据,便取出来进行游戏画面绘制。由于ui线程和worker线程是独立并行的,每次的逻辑运算都由worker线程进行异步处理,并不会阻塞主ui线程的游戏循环。这样一来就可以避免逻辑运算造成卡帧问题,从而保证游戏稳定的高帧率运行。

为了让方案有更好的兼容性,本申请在项目实践中做了一些改良,从图5可以看到,改良的方案在原本的游戏逻辑上面封装了一层,这里称之为逻辑适配层。逻辑适配层里面根据运行环境对webworker的支持情况作了逻辑分支处理。在不支持webworker的情况下,直接在ui线程上运行游戏逻辑运算,和之前的逻辑拆分方案是一致的。在支持webworker的情况下,在逻辑适配层里面做处理异步消息,负责和worker线程进行通信。worker线程里面产生的动画数据也是先通过异步消息通知给逻辑适配层,逻辑适配层再把动画数据缓存到动画数据队列。

经过改良以后的方案具备几个好处:

(1)逻辑适配层可以封装成和游戏逻辑模块一样的接口,这样可以减少原有外层调用逻辑的改动。因为引入webworker以后,要获取游戏逻辑产出的数据,只能通过消息方式进行传递。这种消息传递方式和非worker模式下调用游戏逻辑模块的方式是差异十分大的。而引入逻辑适配层以后,可以把worker模式下的消息交互逻辑封装起来,对外暴露成和非worker模式下一模一样的调用接口,这样原本的调用逻辑就无须进行修改或者只需进行少量的修改。

(2)逻辑适配层把与worker进行交互的逻辑封装起来以后,外层进行调用的时候就无需关心当前是处于worker模式还是非worker模式。因为适配层已经处理好了,无论是worker模式还是非worker模式,对外层来说都是一样的。这样一来,调用逻辑会更加的简单清晰,而并不会因为worker的引入增加了外层调用的复杂度。

(3)逻辑适配层的引入让逻辑更加清晰,易于后期的维护。逻辑适配层把ui调用层和逻辑层完全隔离开来了,这样也方便后续因为一些特殊需求在适配层上做一些特殊处理。由于特殊处理的逻辑是在逻辑适配层进行实现的,这并不会影响外层的调用逻辑。

(4)逻辑适配层可以适当地做一些数据缓存。如在消除类游戏中,逻辑层的有些状态是初始化以后就固定不变的,没有必要每次通过消息通信进行查询。这种变化比较少的数据就可以初始化以后发送给逻辑适配层,在逻辑适配层做一些数据缓存。由于缓存的逻辑也是在适配层进行实现的,对外层调用而已是不感知的,也不会影响外层的调用逻辑。

对比之前的相关技术方案,可以很明显地看到相关技术方案的问题在本技术方案中都是不存在的。因为现有技术方案所带来的问题大多都是逻辑处理较慢引起的,而本技术方案是多线程并行运行,且无须对逻辑进行拆分,所以也不会产生现有技术方案造成的问题。

另外一方面,因为相关技术方案中逻辑运算和画面渲染是串行的,就算在逻辑运算过程还没完成的时候就已经产生了动画数据,此时也不能播放动画,要等到逻辑运算完成以后才能执行渲染动画。而本技术方案则不一样,本技术方案中,逻辑运算和画面渲染是并行处理的,互不干涉,逻辑运算只要有动画数据发送给动画数据队列,动画渲染的工作就可以随时进行。整体来说动画的播放会更加及时,从用户的体验上来感觉,输入的响应会更加及时,能带来更好的用户体验。

在有复杂独立逻辑的游戏产品中比较适用本方案的技术方案,如应用于“天天爱消除h5版”。本方案能带来游戏流畅度上的提升,最直接的指标是fps上的提升。如“天天爱消除h5版”应用该方案以后,在低端安卓机环境下进行测试,如图6所示,横轴表示时间,纵轴表示帧率(每秒帧数),游戏运行的平均fps从以前的27帧提高到38帧(满帧是60),而且应用该方案以后帧率很稳定,优化效果十分明显。主要的操作方式是把游戏逻辑单独抽离出来独立成一个javascript文件,单独开一个worker线程来处理这个游戏逻辑。“天天爱消除h5版”采用表现和游戏逻辑分离的架构,消除相关的逻辑完全独立,把“天天爱消除h5版”的逻辑层打成一个javascript文件,针对该javascript创建一个worker线程来接收玩家的操作并处理消除相关逻辑。

本方案能带来游戏流畅度上的提升,最直接的指标是fps的提升。《天天爱消除h5版》应用该方案以后,在低端安卓机环境下进行测试,游戏运行的平均fps从以前的27帧提高到38帧(满帧是60),而且应用该方案以后帧率很稳定,优化效果十分明显。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

根据本发明实施例,还提供了一种用于实施上述游戏动画的渲染方法的游戏动画的渲染装置。图7是根据本发明实施例的一种可选的游戏动画的渲染装置的示意图,如图7所示,该装置可以包括:第一获取单元71、第二获取单元73以及渲染单元75。

第一获取单元71,用于在客户端上获取对目标游戏的操作指令,其中,目标游戏为在支持网页环境的客户端中运行的网页游戏。

上述的客户端为支持网页环境的客户端,包括但不局限于:web浏览器,支持web功能的社交应用、即时通讯应用、视频应用、音乐应用、输入法应用。

上述的目标游戏即在客户端中运行的游戏,包括但不局限于:单机游戏、网络在线游戏、角色扮演游戏rpg(role-playinggame)、动作游戏act(actiongame)、冒险游戏avg(adventuregame)、第一人称视角射击游戏fps(firstpersonalshootinggame)、第三人称射击类游戏tps(thirdpersonalshootinggame)、格斗游戏ftg(fightinggame)、多人在线战术竞技游戏moba(multiplayeronlinebattlearena)、卡牌游戏cag(cardgame)、即时战略游戏rts(real-timestrategygame)。

上述的操作指令即由游戏参与者发出的用于对目标游戏角色进行游戏任务的指示的指令,如在射击游戏中,指示射击者进行移动的移动指令、指示射击者进行射击的射击指令。

第二获取单元73,用于获取操作指令在目标游戏中指示执行的游戏任务。

在游戏的游戏逻辑中,已经预先建立有操作指令与游戏任务的对应关系,第二获取单元即根据当前接收到的操作指令查找对应的游戏任务,如在射击游戏中,查找与移动指令的移动任务(射击者进行移动的任务)、查找与射击指令对应的射击任务(射击者进行射击的任务)。如图8所示,用户可以左右拖动炮塔,并通过“射击按钮”发射炮弹“射击对象”。

渲染单元75,用于通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,其中,多个线程为用于运行目标游戏的线程。

相关技术中,在接收到游戏任务时,是有客户端所在的线程统一进行处理,包括串行处理游戏逻辑和游戏渲染,一般而言,游戏逻辑比较复杂,每一次循环中游戏逻辑需要消耗的时间比较长,而游戏渲染需要等待较长时间,对于游戏逻辑的处理而言,每一次循环过程中也需要等待渲染完成之后才进行,从而使得游戏画面的帧数较低。

在本申请中,多个线程基于游戏任务并行运行在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画时,部分线程处理游戏任务的游戏逻辑、部分线程进行游戏动画的渲染,对于处理游戏逻辑的线程而言,可以连续不断的根据游戏任务执行游戏逻辑得到待渲染的数据(即第一数据),而无需等待每一次循环中的游戏渲染结束,而对于处理游戏渲染的线程而言,可以连续不断的根据得到的待渲染的数据进行游戏动画的渲染,而不用等待游戏逻辑处理的结束。

相较于单个线程而言,对于处理游戏逻辑的线程而言,无需等待游戏渲染的结束,可以一直进行游戏逻辑的处理,使得单位时间内得到的待渲染的数据更多;对于处理游戏渲染的线程而言,无需等待游戏逻辑处理的结束,可以一直进行游戏渲染的处理,使得单位时间内渲染出画面的数量更多。

需要说明的是,该实施例中的第一获取单元71可以用于执行本申请实施例中的步骤s202,该实施例中的第二获取单元73可以用于执行本申请实施例中的步骤s204,该实施例中的渲染单元75可以用于执行本申请实施例中的步骤s206。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现。

通过上述模块,在客户端上获取对目标游戏(为在支持网页环境的客户端中运行的网页游戏)的操作指令,获取操作指令在目标游戏中指示执行的游戏任务;通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,由于多个线程是并行运行,可以解决相关技术中游戏画面的帧率较低的技术问题,进而达到提高游戏画面的帧率的技术效果。

在本申请的技术方案中,主要是使用了webworker技术对web游戏的流畅度进行优化,提升游戏fps。由于web游戏依托于javascript脚本在浏览器上运行,一方面javascript语言本身存在明显的运行性能弊端,另外一方面javascript语言是单线程语言,传统的做法下游戏逻辑运算和ui渲染处于同一线程,重度复杂的游戏逻辑运算会阻塞ui渲染造成游戏卡顿问题。webworker提供了一种创建worker线程的简单方法,允许在worker线程下处理计算密集任务而不影响主ui线程。本发明使用webworker技术把复杂重度的逻辑运算抽离出来放到worker线程下运行,和主ui线程进行分离,然后在主ui线程和worker线程之间建立交互模型。解决了重度复杂的逻辑运算阻塞主ui线程而造成的游戏画面卡顿问题,保证了游戏渲染帧率的稳定,从而保证web游戏整体的流畅运行。下面结合图7所示的单元进行详述:

可选地,第一获取单元71在客户端上获取对目标游戏的操作指令包括但不局限于如下方式:

当游戏参与者在客户端中进行游戏操作时,移动终端(即安装上述的客户端的终端)会实时监测游戏输入设备(如手柄、鼠标、键盘、触摸屏、手势识别装置)上的操作事件,在移动终端上检测到操作事件的情况下,在客户端上获取与操作事件对应的操作指令。

如在射击游戏中,当游戏参与者在客户端中点击“移动按钮”时,操作指令即为与“移动按钮”对应的移动指令,当游戏参与者在客户端中点击“射击按钮”时,操作指令即为与“射击按钮”对应的射击指令。

本申请的上述渲染单元还用于通过多个线程并行执行游戏任务和与游戏任务对应的渲染任务,渲染任务用于根据执行游戏任务得到的数据在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画。

可选地,渲染单元可包括:第一处理模块,用于通过多个线程中的第一线程执行游戏任务,得到第一数据,其中,第一数据用于在客户端中渲染出游戏动画中的游戏画面;第二处理模块,用于通过多个线程中的第二线程执行渲染任务,以利用第一数据逐帧渲染出游戏动画中的游戏画面。

上述的第一处理模块还用于在游戏任务为多个的情况下,通过多个第一线程并行执行多个游戏任务。

可选地,为了实现第一线程和第二线程的通讯,渲染单元还包括:通讯模块,用于在得到第一数据之后,通过第一线程将第一数据采用异步消息的方式传输至消息队列进行保存,其中,消息队列用于为第二线程保存待处理的第一数据;检测模块,用于通过第二线程检测消息队列中是否存在第一数据,其中,在消息队列中存在第一数据的情况下,通过第二线程读取第一数据并执行渲染任务。

可选地,本申请的装置还可包括:第三获取单元,用于通过多个线程并行执行游戏任务和与游戏任务对应的渲染任务之前,获取客户端的标识信息,其中,标识信息用于指示客户端是否支持多线程运行;创建单元,用于在标识信息指示客户端支持多线程运行的情况下,创建用于执行游戏任务的第一线程。

在本申请的技术方案中,具备如下特征:

(1)逻辑适配层可以封装成和游戏逻辑模块一样的接口,这样可以减少原有外层调用逻辑的改动。因为引入webworker以后,要获取游戏逻辑产出的数据,只能通过消息方式进行传递。这种消息传递方式和非worker模式下调用游戏逻辑模块的方式是差异十分大的。而引入逻辑适配层以后,可以把worker模式下的消息交互逻辑封装起来,对外暴露成和非worker模式下一模一样的调用接口,这样原本的调用逻辑就无须进行修改或者只需进行少量的修改。

(2)逻辑适配层把与worker进行交互的逻辑封装起来以后,外层进行调用的时候就无需关心当前是处于worker模式还是非worker模式。因为适配层已经处理好了,无论是worker模式还是非worker模式,对外层来说都是一样的。这样一来,调用逻辑会更加的简单清晰,而并不会因为worker的引入增加了外层调用的复杂度。

(3)逻辑适配层的引入让逻辑更加清晰,易于后期的维护。逻辑适配层把ui调用层和逻辑层完全隔离开来了,这样也方便后续因为一些特殊需求在适配层上做一些特殊处理。由于特殊处理的逻辑是在逻辑适配层进行实现的,这并不会影响外层的调用逻辑。

(4)逻辑适配层可以适当地做一些数据缓存。如在消除类游戏中,逻辑层的有些状态是初始化以后就固定不变的,没有必要每次通过消息通信进行查询。这种变化比较少的数据就可以初始化以后发送给逻辑适配层,在逻辑适配层做一些数据缓存。由于缓存的逻辑也是在适配层进行实现的,对外层调用而已是不感知的,也不会影响外层的调用逻辑。

对比之前的相关技术方案,可以很明显地看到相关技术方案的问题在本技术方案中都是不存在的。因为现有技术方案所带来的问题大多都是逻辑处理较慢引起的,而本技术方案是多线程并行运行,且无须对逻辑进行拆分,所以也不会产生现有技术方案造成的问题。

另外一方面,因为相关技术方案中逻辑运算和画面渲染是串行的,就算在逻辑运算过程还没完成的时候就已经产生了动画数据,此时也不能播放动画,要等到逻辑运算完成以后才能执行渲染动画。而本技术方案则不一样,本技术方案中,逻辑运算和画面渲染是并行处理的,互不干涉,逻辑运算只要有动画数据发送给动画数据队列,动画渲染的工作就可以随时进行。整体来说动画的播放会更加及时,从用户的体验上来感觉,输入的响应会更加及时,能带来更好的用户体验。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。

根据本发明实施例,还提供了一种用于实施上述游戏动画的渲染方法的服务器或终端。

图9是根据本发明实施例的一种终端的结构框图,如图9所示,该终端可以包括:一个或多个(图9中仅示出一个)处理器901、存储器903、以及传输装置905(如上述实施例中的发送装置),如图9所示,该终端还可以包括输入输出设备907。

其中,存储器903可用于存储软件程序以及模块,如本发明实施例中的游戏动画的渲染方法和装置对应的程序指令/模块,处理器901通过运行存储在存储器903内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的游戏动画的渲染方法。存储器903可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器903可进一步包括相对于处理器901远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

上述的传输装置905用于经由一个网络接收或者发送数据,还可以用于处理器与存储器之间的数据传输。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置905包括一个网络适配器(networkinterfacecontroller,nic),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置905为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。

其中,具体地,存储器903用于存储应用程序。

处理器901可以通过传输装置905调用存储器903存储的应用程序,以执行下述步骤:

在客户端上获取对目标游戏的操作指令,其中,目标游戏为在支持网页环境的客户端中运行的网页游戏;

获取操作指令在目标游戏中指示执行的游戏任务;

通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,其中,多个线程为用于运行目标游戏的线程。

处理器901还用于执行下述步骤:

在得到第一数据之后,通过第一线程将第一数据采用异步消息的方式传输至消息队列进行保存,其中,消息队列用于为第二线程保存待处理的第一数据;

通过第二线程检测消息队列中是否存在第一数据,其中,在消息队列中存在第一数据的情况下,通过第二线程读取第一数据并执行渲染任务。

采用本发明实施例,在客户端上获取对目标游戏(为在支持网页环境的客户端中运行的网页游戏)的操作指令,获取操作指令在目标游戏中指示执行的游戏任务;通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,由于多个线程是并行运行,可以解决了相关技术中游戏画面的帧率较低的技术问题,进而达到提高游戏画面的帧率的技术效果。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

本领域普通技术人员可以理解,图9所示的结构仅为示意,终端可以是智能手机(如android手机、ios手机等)、平板电脑、掌上电脑以及移动互联网设备(mobileinternetdevices,mid)、pad等终端设备。图9其并不对上述电子装置的结构造成限定。例如,终端还可包括比图9中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图9所示不同的配置。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(read-onlymemory,rom)、随机存取器(randomaccessmemory,ram)、磁盘或光盘等。

本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行游戏动画的渲染方法的程序代码。

可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:

s21,在客户端上获取对目标游戏的操作指令,其中,目标游戏为在支持网页环境的客户端中运行的网页游戏;

s22,获取操作指令在目标游戏中指示执行的游戏任务;

s23,通过多个线程基于游戏任务并行运行,在客户端上渲染出在目标游戏中执行游戏任务时的游戏动画,其中,多个线程为用于运行目标游戏的线程。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

s31,在得到第一数据之后,通过第一线程将第一数据采用异步消息的方式传输至消息队列进行保存,其中,消息队列用于为第二线程保存待处理的第一数据;

s32,通过第二线程检测消息队列中是否存在第一数据,其中,在消息队列中存在第一数据的情况下,通过第二线程读取第一数据并执行渲染任务。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

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

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

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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