Cocos Cerator调整节点顺序后获取节点位置信息

Cocos Cerator调整节点顺序后获取节点位置信息,第1张

    阅读前,建议学习下皮佬的文章 — 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),再在开头处添加3个节点(添加0、添加1、添加2)。current指向第一次添加后的children[0],即添加后的children[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);
	}
}
   浏览器预览

   控制台打印

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1296501.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存