阅读前,建议学习下皮佬的文章 — Cocos Creator 源码解读:siblingIndex 与 zIndex
解决 通过setSiblingIndex
改变节点在父节点中的顺序,即node.parent.chindren[index]
,想拿到某个节点排序后的坐标,监听事件就行了。注意: 按你需求on
+ off
监听或once
监听
// 当节点在兄弟节点中的顺序发生变化时触发的事件。
cc.Node.EventType.SIBLING_ORDER_CHANGED
node.on(cc.Node.EventType.SIBLING_ORDER_CHANGED, () => {
cc.log("排序后的位置:", JSON.parse(JSON.stringify(node.position)));
}, this);
demo
节点结构
container节点上的Layout组件(水平排列)
先在container中放4个节点(0~3),再在开头处
start(){
this.testOrderChildren();
}
/**测试指定位置添加子节点,获取排序后的位置 */
testOrderChildren() {
let root_ = cc.find("Canvas/ViewRoot/testOrderChildren");
root_.active = true;
let root = cc.find("case1", root_);
if (root) {
root.active = true;
let container = cc.find("container", root);
let item__ = cc.find("item", root);
Array(4).fill(0).forEach((_, index) => {
let item = cc.instantiate(item__);
// item.setScale(0.5);
let i = index;
// if (i >= 2) {
// i++;
// }
item.name = "item" + i;
cc.find("label", item).getComponent(cc.Label).string = item.name;
item.active = true;
// item.zIndex = i;
item.parent = container;
});
let current = container.children[0];
cc.log("添加前的位置:", JSON.parse(JSON.stringify(current.position)));
Array(3).fill(0).forEach((_, index) => {
let pos = 0;// 在指定索引处插入元素
let item = cc.instantiate(item__);
// item.setScale(0.5);
let i = index;
// if (i >= 2) {
// i++;
// }
item.name = "添加" + i;
cc.find("label", item).getComponent(cc.Label).string = item.name;
item.active = true;
item.parent = container;
item.setSiblingIndex(pos + index);
// item.zIndex = i;
});
cc.log("添加后的位置:", JSON.parse(JSON.stringify(current.position)));
current.on(cc.Node.EventType.SIBLING_ORDER_CHANGED, () => {
cc.log("排序后的位置:", JSON.parse(JSON.stringify(current.position)));
}, this);
}
}
浏览器预览
控制台打印
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)