发明内容
本发明的主要目的在于提供一种图形处理方法和装置,以解决现有技术在某些场景下执行图形重绘处理时CPU消耗比较大的问题。
为了实现上述目的,根据本发明的一个方面,提供了一种图形处理方法。该图形处理方法包括:获取图形节点的数据;判断图形节点的数据是否发生变化;如果确定图形节点的数据发生变化,则对所有图形节点执行重绘处理;以及如果确定图形节点的数据未发生变化,则不对图形节点执行重绘处理。
进一步地,获取图形节点的数据具体为:遍历图形容器上所有图形节点,以及更新所述图形容器上图形节点的数据,以及获得更新后图形节点的数据。
进一步地,在对所有图形节点执行重绘处理之前,图形处理方法包括:擦除图形容器上的绘图内容。
进一步地,图形节点的数据包括图形节点的数量、图形节点的标识和图形节点的属性,判断图形节点的数据是否发生变化包括:获取当次图形节点的数据和上一次图形节点的数据,其中,所述当次图形节点的数据和上一次图形节点的数据为相邻两次检测得到的图形节点的数据;判断所述当次图形节点与上一次图形节点的数量、标识和属性是否都相同,如果是都相同,则确定所述图形节点的数据没有发生变化,否则确定所述图形节点的数据发生变化。
进一步地,在对所述帧执行重绘处理之后,进入休眠状态,其中,在所述休眠状态下,不执行重绘处理,直到所述休眠状态的持续时间达到所述预设时间,返回所述获取图形节点的数据的步骤。
为了实现上述目的,根据本发明的另一方面,提供了一种图形处理装置。该图形处理装置包括:检测单元,用于获取图形节点的数据;判断单元,用于判断图形节点的数据是否发生变化;重绘单元,用于在确定图形节点的数据发生变化时,对图形节点执行重绘处理,以及在确定图形节点的数据未发生变化时,不对图形节点执行重绘处理。
进一步地,检测单元还包括:遍历模块,用于遍历图形容器上所有图形节点;更新模块,用于更新图形容器上图形节点的数据。
进一步地,图形处理装置还包括:擦除单元,用于在遍历图形容器上所有图形节点之前,擦除图形容器上的绘图内容。
进一步地,图形节点的数据包括图形节点的数量、所述图形节点的标识和图形节点的属性,所述判断单元包括:获取模块,用于获取当次图形节点的数据和上一次图形节点的数据,其中,所述当次图形节点的数据和上一次图形节点的数据为相邻两次检测得到的图形节点的数据;判断模块,用于判断所述当次图形节点与上一次图形节点的数量、标识和属性是否都相同;确定模块,用于在判断模块判断当次图形节点与上一次图形节点的数量、标识和属性都相同时,确定所述图形节点的数据没有发生变化,否则确定所述图形节点的数据发生变化。
进一步地,所述重绘单元还用于依次对所述图形节点的帧执行重绘处理,所述重绘单元包括:重绘模块,用于对所述帧执行重绘处理;休眠模块,用于在对所述帧执行重绘处理之后,进入休眠状态,其中,在所述休眠状态下,不执行重绘处理;判断模块,用于判断所述休眠状态的持续时间是否达到预设时间,如果所述休眠状态的持续时间达到所述预设时间,通知所述检测单元获取图形节点的数据。
通过本发明,采用获取图形节点的数据后,判断图形节点的数据是否发生变化;如果确定图形节点的数据发生变化,则对图形节点执行重绘处理;以及如果确定图形节点的数据未发生变化,则不对图形节点执行重绘处理,而是休眠,与现有重绘技术相比,这种重绘判断处理的方法在画面相同的情况下是不进行重绘处理,因此减少了没意义的重绘处理从而降低了CPU的能耗。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
本发明实施例提供了一种图形处理方法。
图1是根据本发明实施例的图形处理方法的流程图。如图所示,该图形处理方法包括如下步骤:
步骤S101,获取图形节点的数据。
该步骤每隔一段预设的时间遍历所有图形节点,更新所述图形容器上图形节点的数据,以及获得更新后图形节点的数据。
具体地,检测的时间与程序每秒绘制的帧率有关,如果程序1秒的绘制帧率是35帧,那么每隔1/35秒就遍历一次,获取图形节点的数据。
在浏览网页或玩游戏所显示出来的画面,实际是应用程序调用图形容器(例如HTML5中的Canvas)不断根据图形节点进行绘制获得的。在极短的时间内,绘制若干张图片并依次显示,就形成了我们肉眼所看的画面(场景)切换。
图形节点是根据实际业务场景设定的,是一种数据结构,通过调用图形容器渲染这些节点,就能在等到相应的画面(图),一个画面可以由一个图形节点构成,也可能由N个图形节点构成。动态的画面切换,可以是程序根据不同的图形节点渲染出的不同的画面切换实现,也可以是根据相同但属性有变化的节点渲染出不同的画面切换实现。图形节点的变化取决于程序的业务逻辑需要,以及用户输入的操作指令。
步骤S102,判断图形节点的数据是否发生变化。
具体地,将当次遍历图形节点的数据结果与上一次遍历图形节点的数据结果进行对比,判断图形节点的数据是否发生变化。
步骤S103,如果确定图形节点的数据发生变化,则对所有图形节点执行重绘处理。
步骤S104,如果确定图形节点的数据未发生变化,则不对图形节点执行重绘处理。
获取图形节点的数据具体包括:遍历图形容器上所有图形节点,以及更新图形容器上图形节点的数据。
Canvas是HTML5提供的图形容器,游戏开发者通过在Canvas上进行不断的擦除与重绘,实现游戏画面变换。
例如玩游戏,画面场景会不断变化,为了及时判断图形节点的数据是否发生更改,每到预设的时间,则遍历一次图形节点,更新图形节点的数据。其中,图形节点属性的更新和检测是通过游戏应用调用JavaScript程序来处理。
为了避免绘制图像时残留之前的图形,使绘制的图形更加清晰,在重绘处理之前,游戏应用调用JavaScript程序擦除图形容器上的绘图内容。
判断图形节点的数据是否发生变化的流程图如图2所示,具体包括如下步骤:
步骤S201,获取当次图形节点的数据和上一次图形节点的数据。
其中,图形节点的数据包括图形节点的数量、图形节点的标识、图形节点的属性。其中,图形节点标识可以是名称或一些可以识别的特征码,名称与特征码的作用都是用来分辨出不同的图形节点,根据实际的情况,可以不局限以上的区分方式。
其中,图形节点的属性包括x坐标、y坐标、宽度、高度、旋转角度、倾斜角度、透明度、可见性、当前帧数和颜色等。
步骤S202,判断当次图形节点与上一次图形节点的数据是否相同。
具体的,判断当次图形节点的数量、标识及属性与上一次图形节点的数量、图形节点的标识、图形节点的属性是否相同。
步骤S203,如果判断出当次图形节点的数量、标识和属性与上一次图形节点的数量、标识和属性都相同,则确定图形节点的数据没有发生变化。
步骤S204,如果判断出当次图形节点的数量、标识和属性与上一次图形节点的数量、标识和属性有任一不相同,则确定图形节点的数据发生变化。
具体地,步骤S203和步骤S204中,将遍历的当次图形节点的数据与遍历的上一次图形节点的数据进行对比,如果图形节点的数量不一样,则认为图形节点的数据发生了变化;如果图形节点的数量一样,但图形节点的标识不一样,则认为图形节点的数据发生了变化;如果图形节点的数量与标识一样,但任一图形节点的属性不一样,也认为图形节点的数据发生了变化。即图形节点的数量、标识和属性有任一不相同,则认为图形节点的数据发生变化。
另外,如果确定图形节点的数据发生变化,则对所有图形节点执行重绘处理包括:对图形节点所在的帧执行重绘处理。
其中,对图形节点所在的帧执行重绘处理包括:
在对帧执行重绘处理之后,进入休眠状态,其中,在休眠状态下,不执行重绘处理;
判断休眠状态的持续时间是否达到预设时间;
如果判断出休眠状态的持续时间达到预设时间,则再次遍历所有图形节点;
将当次遍历的图形节点的数据与上一次遍历的图形节点的数据进行对比,结果不相同才重绘帧,如果两次遍历图形节点的数据相同,则继续休眠,直至到下一个预设时间。
从上面可以看到,当画面没有发生变化,是不执行重绘操作,而是休眠,与现有重绘技术相比,这种重绘判断处理的方法在画面相同的情况下是不进行重绘处理,因此减少了没意义的重绘处理从而降低了CPU的能耗。
以下结合以斗地主的游戏对本发明的实施方案进行说明。
游戏应用通过控制图形容器进行不断的擦除与重绘,实现游戏画面的切换。
用户玩斗地主时,游戏应用每隔一段时间就检测图形节点是否变化。比如游戏绘制帧率为35帧/秒,那么每隔1/35秒,游戏应用就会去遍历所有的图形节点,在更新图形节点时,通过将当次遍历的图形节点结果与上一次绘制后的图形节点结果对比,如果一样,说明图形节点没有变化,如果不一样(图形节点的数量不一样,或图形节点标识不一样,或图形节点的属性不一样),说明图形节点的数据发生了变化。
图形节点的数据发生变化,则需要重新绘制所有的图形节点,在重绘图形节点之前,游戏应用通过调用JavaScript程序来将图形容器上已有的绘图内容抹除,避免在重绘的过程中出现画面的残留。重绘过程在游戏中表现为:用户执行了打出一张卡牌A,游戏应用获得用户操作输入后,图形节点发生了相应的变化:在原有的基础上增加了与“卡牌A”相对应的节点。假设游戏应用的渲染帧率为35帧,那么在1/35秒后,游戏应用遍历所有的图形节点。在更新图形节点时,通过将当次遍历的图形节点的数据与上一次绘制后的图形节点的数据相比,当次的图形节点结果中多了与“卡牌A”相关的图形节点。游戏应用通过JavaScript程序调用图形容器重绘所有的图形节点,在重绘之前,先将图形容器上已有的图像内容抹除,绘制结束后,用户可以看到游戏画面上多了一张“卡牌A”(用户执行打出卡牌A的结果)。
从上可以看到,图形节点变化是根据游戏实际场景变化而变化:游戏场景中的元素发生了变化:游戏场景增加了新的元素或减少了原有的元素,用户执行了某些操作导致游戏场景增加了新的元素或减少了原有的元素,实际中图形节点就会发生相应的变化,而图形节点的属性变更,则可以通过setX方法来更新节点属性的x轴、y轴、宽度、高度、旋转角度等数值。
作为本方案的另一个实施例,如果在一段时间内,玩家没有出牌,游戏场景相比之前没有发生改变:桌面上的卡牌一样,场景中其他元素也一样,那么在这段游戏场景没有变化的时间内,游戏应用是不执行画面重绘处理。具体为:
假设游戏应用的渲染帧率为35帧,那么在1/35秒后,游戏应用去遍历所有的图形节点,在更新图形节点时,通过将当次遍历的图形节点结果与上一次绘制后的图形节结果对比,相比上一次的图形节点结果,如果图形节点的数量、节点标识、属性都一样,那么图形节点没有发生变化,程序不执行重绘,继续睡眠,直到下一个1/35后唤醒,再遍历图形节点,执行图形节点的数据对比。
本发明实施例提供了一种图形处理装置。
图3是根据本发明一实施例的图形处理装置的示意图。如图所示,该图形处理装置包括检测单元10、判断单元20和重绘单元30。
检测单元10用于获取图形节点的数据。
具体地,获取数据的时间与程序每秒绘制的帧率有关,如果程序1秒的绘制帧率是35帧,那么每隔1/35秒就获取一次图形节点的数量、图形节点标识及图形节点的属性。
在浏览网页或玩游戏所显示出来的画面切换,实际是通过程序调用图形容器不断根据图形节点进行绘制获得的,在极短的时间内,绘制若干张图片并依次显示,就形成了我们肉眼所看的画面(场景)切换。
图形节点是由程序所设定的,是一种数据结构,图形容器渲染这些节点后,输出相应的画面(图),一个画面可以由一个图形节点构成,也可能由N个图形节点构成。动态的画面切换,可以是程序根据不同的图形节点渲染出的不同的画面切换实现,也可以是根据相同但属性有变化的节点渲染出不同的画面切换实现。图形节点的变化取决于程序的业务逻辑需要,以及用户输入的操作指令。
其中,图形节点的属性包括x坐标、y坐标、宽度、高度、旋转角度、倾斜角度、透明度、可见性、当前帧数和颜色等。
判断单元20用于判断图形节点的数据是否发生变化。
具体地,将现在遍历图形节点结果与上一次遍历图形节点的结果进行对比,判断图形节点的数据是否相同。如果图形节点的数量、图形节点标识及图形节点的属性都相同,则图形节点的数据没有发生变化;反之发生变化。
重绘单元30用于在确定图形节点的数据发生变化时,对所有图形节点执行重绘处理,以及在确定图形节点的数据未发生变化时,不对图形节点执行重绘处理。
在检测图形节点的数据之前,该图形处理方法还包括:遍历图形容器上所有图形节点,以及更新图形容器上图形节点的数据,其中,每更新一次图形容器上图形节点的数据,检测一次图形节点的数据。浏览网页或玩游戏,画面场景会不断变化,为了及时判断图形节点的数据是否发生更改,每更新一次图形节点的数据,则检测一次图形节点的数据。
Canvas是HTML5提供的图形容器,2D游戏开发者通过在Canvas上进行不断的擦除与重绘,实现游戏画面变换。
为了确保每个图形节数据的变化都被及时发现,遍历所有图形节点,并对遍历的所有图形节点进行更新,以及对所有图形节点检测数据。其中,图形节点属性的更新和检测是通过应用程序调用JavaScript程序来处理。
为了避免绘制图像时残留之前的图形,使绘制的图形更加清晰,在绘制图形节点之前,应用程序调用JavaScript程序擦除图形容器上的绘图内容。
检测单元还包括遍历模块和更新模块(图中未示出),能够遍历图形容器上的所有图形节点,并更新图形容器上图形节点的数据。
具体地,
遍历单元,用于遍历图形容器上所有图形节点。
更新单元,用于更新图形容器上图形节点的数据,其中,每更新一次图形容器上图形节点的数据,会检测一次图形节点的数据。
图4是根据本发明又一实施例的图形处理装置的示意图。该数据处理装置包括检测单元10、判断单元20和重绘单元30,其中,判断单元20包括获取模块201、判断模块202、确定模块203。检测单元10与重绘单元30与图3所描述相同。获取模块201用于获取当次图形节点的数据和上一次图形节点的数据,其中,所述当次图形节点的数据和上一次图形节点的数据为相邻两次检测得到的图形节点的数据。
根据实际的情况,可以不局限以上的区分方式。
判断模块202用于用于判断所述当次图形节点与上一次图形节点的数量、标识和属性是否都相同。
确定模块203用于在判断模块202判断当次图形节点与上一次图形节点的数量、标识和属性都相同时,确定所述图形节点的数据没有发生变化,否则确定所述图形节点的数据发生变化。
具体地,将遍历的当次图形节点的数据与遍历的上一次图形节点的数据进行对比,包括图形节点的数量、图形节点的标识、图形节点的属性。
具体地,将将遍历的当次图形节点的数据与遍历的上一次图形节点的数据进行对比,如果图形节点的数量不一样,则认为图形节点发生了变化;如果图形节点的数量一样,但图形节点的标识不一样,则认为图形节点发生了变化;如果图形节点的数量与标识一样,但图形节点的属性不一样,也认为图形节点发生了变化。即图形节点的数量、标识和属性有任一不相同,则认为图形节点的数据发生变化。
该图形处理装置中的重绘单元30用于依次对图形节点的帧执行重绘处理,重绘单元30包括:重绘模块、休眠模块、判断模块。
重绘模块用于对图形节点所在帧执行重绘处理。
休眠模块用于在对帧执行重绘处理之后,进入休眠状态,其中,在休眠状态下,不执行重绘处理。
判断模块用于判断休眠状态的持续时间是否达到预设时间,到达预设时间,通知所述检测单元10获取图形节点的数据。
本发明实施例提供了一种移动终端装置,该移动终端装置包括上述图3或图4所包含的图形处理装置。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。