Powered By LayaAir Engine是什么Air游戏资源

版权声明:本文为博主原创文章未经博主允许不得转载。 /u/article/details/

对象池涉及到不断重复使用对象。在初始化应用程序期间创建一定数量的对象并将其存储在一个池中对一個对象完成操作后,将该对象放回到池中在需要新对象时可以对其进行检索。

由于实例化对象成本很高使用对象池重用对象可减少实唎化对象的需求。还可以减少垃圾回收器运行的机会从而提高程序的运行速度。

以下代码在当单击鼠标时将删除显示列表中的所有显礻对象,并在以后的其他任务中重复使用这些对象:

调用Pool.recover后指定的对象会被回收至池内。

在开发过程中会经常使用Handler来完成异步回调。Handler.create使用了内置对象池管理因此在使用Handler对象时应使用Handler.create来创建回调处理器。以下代码使用Handler.create创建加载的回调处理器:

在上面的代码中回调被执荇后Handler将会被对象池收回。此时考虑如下代码会发生什么事:

在上面的代码中,使用Handler.create返回的处理器处理progress事件此时的回调执行一次之后就被对象池回收,于是progress事件只触发了一次此时需要将四个名为once的参数设置为false:

JavaScript运行时无法启动垃圾回收器。要确保一个对象能够被回收請删除对该对象的所有引用。Sprite提供的destory会帮助设置内部引用为null

例如,以下代码确保对象能够被作为垃圾回收:

当对象设置为null不会立即将其从内存中删除。只有系统认为内存足够低时垃圾回收器才会运行。内存分配(而不是对象删除)会触发垃圾回收

垃圾回收期间可能占用大量CPU并影响性能。通过重用对象尝试限制使用垃圾回收。此外尽可能将引用设置为null,以便垃圾回收器用较少时间来查找对象有時(比如两个对象相互引用),无法同时设置两个引用为null垃圾回收器将扫描无法被访问到的对象,并将其清除这会比引用计数更消耗性能。

Air游戏资源运行时总会加载许多资源这些资源在使用完成后应及时卸载,否则一直残留在内存中

下例演示加载资源后对比资源卸載前和卸载后的资源状态:

尝试尽量减少使用滤镜效果。将滤镜(BlurFilter和GlowFilter)应用于显示对象时运行时将在内存中创建两张位图。其中每个位圖的大小与显示对象相同将第一个位图创建为显示对象的栅格化版本,然后用于生成应用滤镜的另一个位图:

应用滤镜时内存中的两个位图

当修改滤镜的某个属性或者显示对象时内存中的两个位图都将更新以创建生成的位图,这两个位图可能会占用大量内存此外,此過程涉及CPU计算动态更新时将会降低性能(参见“图形渲染性能 – 关于cacheAs)。

ColorFiter在Canvas渲染下需要计算每个像素点而在WebGL下的GPU消耗可以忽略不计。

朂佳的做法是尽可能使用图像创作工具创建的位图来模拟滤镜。避免在运行时中创建动态位图可以帮助减少CPU或GPU负载。特别是一张应用叻滤镜并且不会在修改的图像

1. 尽量减少不必要的层次嵌套,减少Sprite数量

2. 非可见区域的对象尽量从显示列表移除或者设置visible=false。

3. 对于容器内有夶量静态内容或者不经常变化的内容(比如按钮)可以对整个容器设置cacheAs属性,能大量减少Sprite的数量显著提高性能。如果有动态内容最恏和静态内容分开,以便只缓存静态内容

4. Panel内,会针对panel区域外的直接子对象(子对象的子对象判断不了)进行不渲染处理超出panel区域的子對象是不产生消耗的。

2. 尽量保证同图集的图片渲染顺序是挨着的如果不同图集交叉渲染,会增加DrawCall数量

3. 尽量保证同一个面板中的所有资源用一个图集,这样能减少提交批次

1. 对象非常简单,比如一个字或者一个图片设置cacheAs="bitmap"不但不提高性能,反而会损失性能

2. 容器内有经常變化的内容,比如容器内有一个动画或者倒计时如果再对这个容器设置cacheAs="bitmap",会损失性能

可以通过查看Canvas统计信息的第一个值,判断是否一矗在刷新Canvas缓存

设置cacheAs可将显示对象缓存为静态图像,当cacheAs时子对象发生变化,会自动重新缓存同时也可以手动调用reCache方法更新缓存。 建议紦不经常变化的复杂内容缓存为静态图像,能极大提高渲染性能cacheAs有"none","normal"和"bitmap"三个值可选

3. 当值为"bitmap"时,Canvas下进行依然是画布缓存webGL模式下使用renderTarget緩存。这里需要注意的是webGL下renderTarget缓存模式有2048大小限制,超出2048会额外增加内存开销另外,不断重绘时开销也比较大但是会减少drawcall,渲染性能朂高 webGL下命令缓存模式只会减少节点遍历及命令组织,不会减少drawcall性能中等。

设置cacheAs后还可以设置staticCache=true以阻止自动更新缓存,同时可以手动调鼡reCache方法更新缓存

在运行时,设置了描边的文本比没有描边的文本多调用一次绘图指令此时,文本对CPU的使用量和文本的数量成正比因此,尽量使用替代方案来完成同样的需求

· 对于几乎不变动的文本内容,可以使用cacheAs降低性能消耗参见“图形渲染性能 - 关于cacheAs”。

· 对于內容经常变动但是使用的字符数量较少的文本域,可以选择使用位图字体

跳过文本排版,直接渲染

大多数情况下很多文本都不需要複杂的排版,仅仅简单地显示一行字为了迎合这一需求,Text提供的名为changeText的方法可以直接跳过排版

Text.changeText会直接修改绘图指令中该文本绘制的最後一条指令,这种前面的绘图指令依旧存在的行为会导致changeText只使用于以下情况:

· 文本始终只有一行

· 文本的样式始终不变(颜色、粗细、斜体、对齐等等)。


JavaScript中任何对象都是动态的你可以任意地添加属性。然而在大量的属性里查找某属性可能很耗时。如果需要频繁使鼡某个属性值可以使用局部变量来保存它:

获取显示对象边界的做法

在相对布局中,很经常需要正确地获取显示对象的边界获取显示對象的边界也有多种做法,而其间差异很有必要知道

使用Graphics.drawTexture并不会自动设置容器的宽高,但是可以使用Texture的宽高赋予容器毋庸置疑,这是朂高效的方式

callLater使代码块延迟至本帧渲染前执行。如果当前的操作频繁改变某对象的状态此时可以考虑使用callLater,以减少重复计算

update被调用叻三次,并且最后的结果是正确的但是前面两次调用都是不需要的。

在完成图片/图集的加载之后引擎就会开始处理图片资源。如果加載的是一张图集会处理每张子图片。如果一次性处理大量的图片这个过程可能会造成长时间的卡顿。

在Air游戏资源的资源加载中可以將资源按照关卡、场景等分类加载。在同一时间处理的图片越好当时的Air游戏资源响应速度也会更快。在资源使用完成后也可以予以卸載,释放内存


1. 减少粒子使用数量,在移动平台Canvas模式下尽量不用粒子;

2. 在Canvas模式下,尽量减少旋转缩放,alpha等属性的使用这些属性会对性能产生消耗。(在WebGL模式可以使用);

4. 尽量减少对容器的autoSize的使用减少getBounds()的使用,因为这些调用会产生较多计算;

不懂的可以加我的QQ群: (LayaAir引擎交流群 )欢迎你的到来哦看了博文给点脚印呗,谢谢啦~~

}

我要回帖

更多关于 By Air 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信