分层不复杂(实际上只需要比正常情况多做一步而已),只是楼上实现的方法比较麻烦而已。
一般情况是,item统一用prefab,prefab又绑定个组件A,组件A是用来控制item里的逻辑。
多的一步是:在item初始化后,对item里的字节点进行分层操作(从item节点下移除并有规划的添加到其它节点(层),以达到降低dc却不影响显示效果)。
分层不复杂(实际上只需要比正常情况多做一步而已),只是楼上实现的方法比较麻烦而已。
一般情况是,item统一用prefab,prefab又绑定个组件A,组件A是用来控制item里的逻辑。
多的一步是:在item初始化后,对item里的字节点进行分层操作(从item节点下移除并有规划的添加到其它节点(层),以达到降低dc却不影响显示效果)。
能动态的把这事儿做了么。。 比如在item的prefab上加一个额外的组件,填好label的节点,运行的时候,这个组件把所有的label节点搞到一层上。。。
我比较新手,我对你的话理解了下,你看对不:
在运行的时候,新建一个node,用于承载所有label节点。把item中的label移动到新建的这个node的上,作为它的子节点。
这样在渲染的时候,由于是一个node下的N多同层的label,可以合并draw call。
如果是的话,我今天晚上就研究下写一个这种组件~ 哈哈哈哈 成功的话 就放出来。。。
搞不定。。。 尝试用一个代理Node去代理含Label的Node,替换后的位置及之后的位置变化都没法做。。。
把word Node中的label Node替换成一个LabelProxyNode(图中没体现,继承自cc.Node)
步骤:
然后,wordNode是通过prefab创建出来的,脚本中明确声明了一个cc.Label Node,通过编辑器直接就把labelNode赋值了。
后续运行的时候,直接替换wordNode的child无法替换脚本中的引用(好像不替换更好。。。 )
wordNode相对于LineNode的位置是固定的,LineNode相对于flowFrameNode y轴是递减的。。。。。
所以,目前的问题就是,虽说我替换了,但是,labelNode并没有跟着滚动(位置无法处理)
示意图
+--------------------------+Main Node+-------------------------+
| |
| +----------+proxy Node contain all Label Node------------+ |
| | +-------+ +-------+ +-------+ | |
+---------> label | | | | | | |
| | | +-------+ +-------+ +-------+ | |
| | +--------------------------------------------------------+ |
| | +-----------------------+flow frame+---------------------+ |
exchange | | | |
| | | +------------line contain 2 word Node-------------+ | |
| | | | | | |
| | | | +-----+word Node-------+ +-------------------+ | | |
| | | | | +-------+ +------+ | | | | | |
+---------------+ label | | bg | | | | | | |
| | | | +-------+ +------+ | | | | | |
| | | +----------------------+ +-------------------+ | | |
| | | | | |
| | | | | |
| | +-------------------------------------------------+ | |
| | | |
| | +-------------------------------------------------+ | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | +-------------------------------------------------+ | |
| | | |
| | +-------------------------------------------------+ | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| +--+-------------------------------------------------+---+ |
| |
| |
| |
+--------------------------------------------------------------+
真牛逼。。 非常感谢~~
我拿你的例子在手机上试了下,优化与否都不卡,始终是60fps,dc差距确实巨大。
所以,我那个例子卡,可能还是因为滚动实现用了每个节点y–导致的吧? 晚上尝试改成摄像机的方式。
还有两个疑问。。。
谢谢~~
我还发现,这个完全可以写一个非常通用的组件出来。。。。 官方竟然不提供。。。
1.写不写成这样,在这里都没什么影响…
2.因为在分层处理时设置了zIndex
了解了。。 多谢~~
这个还是需要自己优化一下结构
所以,就是把所有label放在一个节点下,所有sprite放在另一个节点下吗
效果不太行。 这个方法在电脑模拟器上有效。 到IOS实机上后,drawcall没有变化
bg和bg的节点层级关系要相邻,中间不要掺label会打断dc, bg应该是图集内的精灵帧, 文本可以试试改成char缓存模式,l应该会降低很多了
非常牛逼 简单明了 优雅