智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...

导航

Starling学习笔记分享,starling内部渲染机制与性能优化

Posted on 2013-02-27 18:09  Bill Yuan  阅读(1759)  评论(0编辑  收藏  举报

转自:http://bbs.9ria.com/thread-103993-1-1.html

starling由于过度模仿flash.display.*里面的类,也带来一些性能上的问题,当我们创建超过300个displayObject时,FPS就会明显下降,所以我们先了解下STARLING是如何处理内部渲染的

打开starling的核心文件可以看到一句代码,而且是强引用

  1. stage.addEventListener(Event.ENTER_FRAME, onEnterFrame, false, 0, true);


然后starling会对内部任何继承displayObject的对象进行实事绘制,这样就造成了性能底下,也就是说,如果你的FPS是60/S,那么如果你创建500个显示对象,那每秒你需要执行60*500=30000次绘制,所以基本上我们知道问题是在哪里,然后我们看看starling.display里面的类是如何处理render

默认情况,starling自带的displayObject是不做任何的render处理,只是存在一个这样的方法而已,当我们自定义一个显示对象时,我们就需要自己override这个render方法,所以归根结底我们还是需要对context3D有一些了解,否则我们是不能去自己开发一些扩展类的

到此各位应该知道,当我们通过starling创建一些游戏的时候,如何优化性能,其实最大的点就是有效减少displayobject的创建,比如我们可以在一个display里面使用多个texture等,这样就减少了starling的循环绘制,性能会得到很大的改善,但是我们需要对context3d有一些了解,否则是无法扩展的,当然官方也提供了一些第三方的扩展类,大家可以自己去下载使用

另外starling的对alpha=0/visible=true/remoeChild的任何显示对象都会不做任何重绘处理,(其实FP的内部绘制接口速度是很快的,真正的原因就是FOR循环导致),但是for循环的总数依然是不变的,我想以后的版本肯定会修复这个问题