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 传上来?我帮你看看。
你好,demo已上传,请帮忙看下哈,多谢!!!
我看过demo了,目前Layout在排列节点时是依赖于节点在节点树里的顺序的,而节点树里的排列顺序又依赖于渲染次序,所以目前没办法做到排列顺序和渲染顺序分离。
这样的需求目前解决办法就是不使用Layout,而是自己实现一个类似Layout的组件,通过设置spacing等属性对子元素进行手动排列。
以后我们会为Layout添加一个接口来获取子节点的数组,用户可以按照自己的需要对这个数组进行排序,来自定义元素的排列顺序,这个顺序会和渲染次序无关。
请问是设置节点的zIndex吗?
setLocalZOrder 和 setSiblingIndex 这两个接口都可以自定渲染顺序
排列顺序就是你用一个 for 循环,然后对每个节点的位置进行设置,这样就和渲染顺序没有关系了
我怎么越看越感觉,你说的和我要实现的不一样?
你说的是Layout子节点的位置顺序的排序吗?
我这边是需要实现,如何让前面添加的节点覆盖后面添加的节点,目前Layout是后面添加的会覆盖前面添加的,
我设置zIndex,和setSiblingIndex 都不起作用呢。
我不知道你说的和我说的是不是一样的… 可能我demo的描述让你误解了?

比如说我这里是先添加的南风,后添加的东风,东风会在南风的上面,如果不是在Layout里面,可以设置zIndex来改变覆盖顺序,让后添加的东风在南风下面,但是在Layout里面就不能。
你把layout设成从下往上的排序,渲染顺序不就对了么,最多再配合个widget保证顶部坐标固定
从下往上是可以,但是需求不是这样的…没办法啊…
最后你怎么处理的呢?
没用layout,手动计算位置,然后设置 zIndex。
现在Layout的排序和节点的渲染次序剥离了吗?
遇见了同样的问题·········
唉,我也遇到这个问题了,竟然这么久了还没处理
经过我们内部的讨论,对于这种情况,建议用户自己去写 layout,如果在引擎层面加,会导致 layout 功能变得复杂,不再像现在这样设计简单。
这个问题通过调整绘制顺序就能实现了啊,先把堆叠方式设置为从上到下,然后把layout旋转180度。