一种基于显示列表的局部刷新方法及装置的制造方法_3

文档序号:9765820阅读:来源:国知局
对象的属性,重新确定显示对象在屏幕上对应的屏幕矩形,作为第二重绘区。其中,每个显示对象的属性包括自身变换信息和自身形状信息。
[0079]重绘模块用于将第一重绘区和第二重绘区清空,并将已发生变化的显示对象重绘至第二重绘区。
[0080]进一步地,重绘区计算模块还可以在屏幕上包括第一重绘区和第二重绘区的重绘区中查找相交的重绘区,并将所找到的相交的重绘区进行合并处理,形成合并重绘区,以供重绘模块对屏幕上的合并处理后得到的各个重绘区进行清空,并在合并重绘区中,重绘相应的显示对象。
[0081]进一步地,重绘区计算模块还可以在屏幕上的重绘区中未找到相交的重绘区,且重绘区的数量大于预设数量时,按照预设策略,将屏幕上的重绘区进行合并处理,直至合并处理后的重绘区数量不大于预设数量,以便重绘模块对屏幕上的合并处理后得到的各个重绘区进行清空,并在合并重绘区中,重绘相应的显示对象。
[0082]图3是本发明实施例提供的显示列表结构示意图,如图3所示,显示了一个简单的显示列表示例。显示列表是一个树状的结构,列表中的每个节点叫做显示对象。显示对象分为两类,一类是普通显示对象,另一类是容器显示对象。容器显示对象可以在内部再包含其他的显示对象(普通和/或容器)。也就是说,可以将容器显示对象类比为一个盒子,里面放入其他显示对象。当移动容器时,它内部的子项也会整体跟着移动,当缩放容器时,它内部的子项也会整体跟着缩放。
[0083]显示列表就是这样一层一层嵌套而成的数据结构。容器通常都只起到整体定位作用,并不呈现图像。而末端叶子节点的普通显示对象通常是图片,可以显示到屏幕上。一个图片节点的所有父级容器上的定位或缩放信息,最终都会应用到这个图片上,用来确定图片在屏幕上最终的显示位置和区域大小。
[0084]以HTML5领域现有的屏幕呈现方式为例,显示列表传统的全屏刷新模式工作原理:首先设定一个时钟频率,例如通常是每秒执行60次。每次都单独刷新一次屏幕。刷新过程就是直接清空整个屏幕,然后从显示列表的根节点开始遍历,按顺序找到每个可呈现的显示对象节点,按照它的坐标和大小绘制到屏幕上。这样开发者只需要改变显示对象的位置属性,等待下一次时钟周期到来,改变就会自动刷新到屏幕上。由于通常情况下,并不是每秒60次显示列表每次都会发生改变,或者发生改变时仅有一小部分改变。因此清空整个屏幕重绘的方式虽然实现简单,但是开销比较大。针对HTML5领域现有屏幕呈现方式存在的问题,本实施例提出一种基于显示列表的局部刷新算法,其只在显示列表里的显示元素发生改变时进行部分刷新,而不会每次都清空整个屏幕,实现计算性能的显著提高,同时降低设备耗电量。具体地说,首先设定一个时钟频率,定时每秒执行60次,但区别在于,不直接清空整个屏幕,而是先计算屏幕上发生改变的区域,本发明称之为重绘区,然后只清空指定的重绘区,并找出与这个重绘区相交的所有显示对象重绘一遍。如果显示列表本次并没有发生改变,那么将直接跳过本次绘制,不进行任何重绘操作。
[0085]因此,要实现局部刷新,首先要获取重绘区。图4是本发明实施例提供的确定显示对象在屏幕上的矩形区域的示意图,如图4所示,每个显示对象在屏幕上都对应一个矩形区域。通常显示对象自身都包含两个属性:自身矩阵(即自身变换信息)和自身矩形(即自身形状信息)。自身矩阵代表该显示对象在父级容器中的位置、缩放等变换信息,也就是开发者最通常操作的部分。自身矩形是固定测量出来的一个四边形,如果是图片,自身矩形等于该图片未缩放时的原始大小区域。自身矩形和自身矩阵叠加,会得到这个显示对象在其父级容器里变换后(例如位移和/或缩放)的矩形区域。为了统一比较,本实施例要获取每个显示对象在屏幕上的矩形,首先是要获得每个显示对象相对于屏幕的矩阵信息(即屏幕矩阵),屏幕矩阵等于自身矩阵和所有父级容器的矩阵相乘结果。最后用屏幕矩阵跟自身矩形叠加得到屏幕矩形。
[0086]获取到每个显示对象在屏幕上的矩形区域(即屏幕矩形)后,需要建立一个通知机制,即每当检测到一个显示对象的屏幕矩阵和/或自身矩形发生改变时,重新计算该显示对象的屏幕矩形。此时能够得到两个矩形,即该显示对象改变前在屏幕上的矩形(即第一重绘区)和改变后在屏幕上的矩形(即第二重绘区),这两个矩形都是要获取的重绘区。图5是本发明实施例提供的获取重绘区的示意图,如图5所示,图片C从屏幕的左边移动到了屏幕的右边,该操作会产生左右两个需要重绘的区域,即重绘区。将两个区域都清空,并根据图片C新的位置,将图片C绘制到新区域(即屏幕右边的重绘区)上,这样图片C就从原位置移动到了新位置。
[0087]图5是单个显示对象移动的情况,缩放的情况也可以此类推。但实际应用中,每次刷新时并不仅有一个显示对象发生改变,可能会产生无数个可能相交的重绘区域。最简单的方式是直接重绘这些显示对象,即找到变化后的屏幕矩形,分别执行清空屏幕矩形的操作,然后查找相交的对象重绘。显然,重绘区数量过大时,会造成巨大的开销,因此本实施例提供了一种优选的方式进行局部刷新,即对得到的重绘区进行合并。合并策略如下:
[0088]策略1:如果两个屏幕矩形合并后的总面积小于两个屏幕矩形各自的面积之和,则允许将这两个屏幕矩形合并,需要说明的是,本实施例优先合并相交面积最大的两个矩形。
[0089]策略2:若不满足策略I,且屏幕矩形的总数量大于预设数量,则进行强制合并,需要说明的是,本实施例优先合并面积增加量最小的两个屏幕矩形。
[0090]经过大量测试,本实施例优选预设数量为3个,也就是说,把合并到最后的重绘区的数量控制在三个以内时是最佳的平衡点,此时,既不会对后续重绘操作带来压力,也足够覆盖大部分的局部刷新情况。图6是本发明实施例提供的合并重绘区的示意图,如图6所示,屏幕上有大量的重绘区域,根据上述合并策略,能够得出最终的三个重绘区。其中,左下角的重绘区,其内部的两个屏幕矩形没有相交区域,也就是说它们合并后的屏幕矩形的面积大于各自的面积之和,本实施例为了将重绘区数量控制在三个及以内,使用了上述策略2将其合并。需要说明的是,当整个屏幕布满零碎的不相交的屏幕矩形时,上述策略将得到唯一的一个全屏矩形,刚好符合全屏刷新的需求,使得本发明同时适应局部刷新和全屏刷新的情况。
[0091]该算法的创新点在对大量重绘区的合并上,根据合并策略I和2,允许一定量的非重绘区在合并过程中纳入重绘区,并控制最终合并结果数量为3个及以内,从而有效降低了后续的重绘操作开销。
[0092]上述方法及装置可以以软件形式实现。首先从Egret网站下载专区下载最新的Egret—键安装包(windows版本)。其次进行引擎安装,具体地说,双击下载到的EgretEngine-v2.5.0.exe,程序将会自动解压,如图7所示;解压后,如果弹出图8所示安全警告,则点击运行,出现如图9所示
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1