Layout添加子节点,渲染顺序问题

Layout里面添加子节点,默认的总是后面添加的节点覆盖前面的,如何让前面的覆盖后面的呢?
用addChild(node, 5…4…3…2…1)和node. setLocalZOrder(5…4…3…2…1)来设置zOrder,但是都没有效果。
请问有小伙伴遇到同类问题的吗?可否告知要如何解决?
多谢!

你可以通过 node 的 setSiblingIndex API 来操作layout 里面子节点的顺序。

你好,设置了还是不起作用呢。API文档说明不是很详细,不知道是不是我用法有误。
我是先将子节点node加入layout,然后node.setSiblingIndex(max)这样,setSiblingIndex传入的值是依次减小的。
是用法有问题吗?

问一下 C++里有没有这种作用的函数呢?

你弄个 demo 传上来?我帮你看看。

多谢了!
LayoutDemo.zip (203.9 KB)

你好,demo已上传,请帮忙看下哈,多谢!!!

我看过demo了,目前Layout在排列节点时是依赖于节点在节点树里的顺序的,而节点树里的排列顺序又依赖于渲染次序,所以目前没办法做到排列顺序和渲染顺序分离。

这样的需求目前解决办法就是不使用Layout,而是自己实现一个类似Layout的组件,通过设置spacing等属性对子元素进行手动排列。

以后我们会为Layout添加一个接口来获取子节点的数组,用户可以按照自己的需要对这个数组进行排序,来自定义元素的排列顺序,这个顺序会和渲染次序无关。

请问是设置节点的zIndex吗?

setLocalZOrdersetSiblingIndex 这两个接口都可以自定渲染顺序

排列顺序就是你用一个 for 循环,然后对每个节点的位置进行设置,这样就和渲染顺序没有关系了

1赞

我怎么越看越感觉,你说的和我要实现的不一样?

你说的是Layout子节点的位置顺序的排序吗?
我这边是需要实现,如何让前面添加的节点覆盖后面添加的节点,目前Layout是后面添加的会覆盖前面添加的,
我设置zIndex,和setSiblingIndex 都不起作用呢。

我不知道你说的和我说的是不是一样的… 可能我demo的描述让你误解了?

比如说我这里是先添加的南风,后添加的东风东风会在南风的上面,如果不是在Layout里面,可以设置zIndex来改变覆盖顺序,让后添加的东风南风下面,但是在Layout里面就不能。

你把layout设成从下往上的排序,渲染顺序不就对了么,最多再配合个widget保证顶部坐标固定

从下往上是可以,但是需求不是这样的…没办法啊…

最后你怎么处理的呢?

没用layout,手动计算位置,然后设置 zIndex。

现在Layout的排序和节点的渲染次序剥离了吗?
遇见了同样的问题·········

唉,我也遇到这个问题了,竟然这么久了还没处理

经过我们内部的讨论,对于这种情况,建议用户自己去写 layout,如果在引擎层面加,会导致 layout 功能变得复杂,不再像现在这样设计简单。

这个问题通过调整绘制顺序就能实现了啊,先把堆叠方式设置为从上到下,然后把layout旋转180度。