setSiblingIndex设置无效

###在onLoad里面设置节点自己的siblingindex无效果,如题:编辑器里根节点放了一个节点a,后期会通过代码手动往根节点放置其他节点,为了保证a节点在最上层,我在a节点的onload里面条用setSiblingIndex,通过打印发现无效果,而zIndex有效。请问你这个siblingIndex和zIndex什么区别?

1赞

http://forum.cocos.com/t/zindex-siblingindex/40970

onLoad 里面不可修改 sibling index

1赞

其实我推荐引擎内部维护这个siblingindex,不然感觉会有奇怪的问题~比如重现加入会重新排序等问题~

引擎内部维护的话,用户该怎么修改子节点的排序呢?

感觉目前改siblingindex都可以用zIndex代替~

嗯,确实可以。不过这样一来,新增节点就不能自动渲染在最上面了,除非你维护好 zIndex

####引擎是不是应该提供一个构造函数给我们呢?类似于2dx的init,在我创建对象时就调用,而不是现在的onLoad只有在添加到父节点才会调用!如题,在自己的onload里不可以修改sibling index, 也不能修改大小(如果编辑器里面没有设置为custom),那我该在何时修改自己的sibline index?
###现在公司在做正式项目,发现好多时候我们需要自己定义一个init函数来传参,但无法保证这个init和onload的执行顺序导致容易出错!!!(如果先调用init后addchild就先走init,如果先addchild后init就先走onload,这样体验太差了!为什么不能提供一个可以传参的构造函数来保证最先执行呢?

你可以使用ctor,真正的构造函数

哦,对,这个确实是这样的,不过我觉得自己既然都调整了zIndex了,新增节点没显示在上面也是理所应当吧?

可以用构造函数,不过不是很推荐。可以封装一下,创建prefab增加一个回调函数,在回调函数里传参数。可以类似这样,一个参考。

cc.Prefab.prototype.newTo = function(prefabParent, callback) {
    var parentNode = null;
    if (prefabParent instanceof cc.Component) {
        parentNode = prefabParent.node;
    }
    else if (prefabParent instanceof cc.Node) {
        parentNode = prefabParent;
    }
    if (parentNode === null) {
        cc.logEX('传入的父节点参数不正确', prefabParent);
        return null;
    }
    var newPrefabNode = cc.instantiate(this);
    if (callback) {
        var scriptComponent = newPrefabNode.getComponent(newPrefabNode.name);
        if (scriptComponent) {
            callback(scriptComponent);
        }
        else {
            cc.logEX("找不到脚本:" + newPrefabNode.name)
            cc.logEX("Prefab脚本必须绑定在Prefab的根节点,且脚本名必须与根节点名相同,才能传入参数")
        }
    }
    parentNode.addChild(newPrefabNode);
    return newPrefabNode;
}

可以在 start 里面设置这些,构造函数之后会支持

构造函数可以,传参不行,否则场景加载时,引擎并不知道这个参数要传入多少才能构造出你的组件。

不是所有人都需要维护 zIndex 的,维护这个也挺累的

继承自组建的类构造函数没法传参的,不能传参的构造函数作用不大。

你确定在自己的onStart函数里设置自己的sibling有效果?

没试过,但应该有效果

是的~~~~~

让子节点显示在最上层
https://www.cnblogs.com/orxx/p/10880411.html

setSiblingIndex设置大一点50左右就无效了