转自:http://bbs.9ria.com/thread-103993-1-1.html
starling由于过度模仿flash.display.*里面的类,也带来一些性能上的问题,当我们创建超过300个displayObject时,FPS就会明显下降,所以我们先了解下STARLING是如何处理内部渲染的
打开starling的核心文件可以看到一句代码,而且是强引用
- 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循环的总数依然是不变的,我想以后的版本肯定会修复这个问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
2010-02-27 加载GB2312编码
2010-02-27 Flash CPU的消耗