[]问下加载大量的sprite,但是同一个资源,会有性能开销不?

现在我战场上1000个小兵
如果每个小兵要新加一个阴影片,同屏的spite数会加1000...好恐怖的数字。。。
但是drawcall应该只加1
这种情况下性能会有影响不?
 
已邀请:

cuixueying

赞同来自:

   无论是Canvas模式还是WebGL模式,我们都需要重点关注DrawCall,Sprite,Canvas这三个参数,然后针对性的进行优化。
针对Sprite的优化
    1)尽量减少不必要的层次嵌套,减少Sprite数量
    2)非可见区域的对象尽量从显示列表移除或者设置visible=false
    3)对于容器内有大量静态内容或者不经常变化的内容(比如按钮),可以对整个容器设置cacheAs属性,能大量减少Sprite的数量,显著提高性能。如果有动态内容,最好和静态内容分开,这样就可以只缓存静态内容。
    4)Panel内,会针对panel区域外的直接子对象(子对象的子对象判断不了)进行不渲染处理,超出panel区域的子对象是不产生消耗的。
针对DrawCall的优化
    1)对复杂静态内容设置cacheAs,能大量减少DrawCall。
    2)尽量保证同图集的图片渲染顺序是挨着的,如果不同图集交叉渲染,会增加DrawCall数量。
    3)尽量保证同一个面板中的所有资源用一个图集,这样能减少提交批次。
针对Canvas的优化
    在对Canvas优化时,我们需要注意,在以下场合不要使用cacheAs:
    1)对象非常简单,比如一个字或者一个图片,设置cacheAs=bitmap不但不提高性能,反而会损失性能。
    2)容器内有经常变化的内容,比如容器内有一个动画或者倒计时,如果再对这个容器设置cacheAs=bitmap,会损失性能。
    可以通过查看Canvas统计信息的第一个值,判断是否一直在刷新Canvas缓存;
具体优化请参考:LayaAir项目优化

要回复问题请先

商务合作
商务合作