智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
随笔 - 991, 文章 - 0, 评论 - 27, 阅读 - 341万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

Posted on   Bill Yuan  阅读(1762)  评论(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循环的总数依然是不变的,我想以后的版本肯定会修复这个问题

(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 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的消耗
点击右上角即可分享
微信分享提示