在 Cocos Creator 中随机打乱子节点的顺序

    shuffleChildrenRandomly(parentNode) {
        // 1. 获取所有子节点数组
        let children = parentNode.children;
        // 创建子节点数组的副本进行操作,避免直接修改原数组可能带来的问题
        let childArray = children.slice();

        // 2. Fisher-Yates 洗牌算法
        for (let i = childArray.length - 1; i > 0; i--) {
            // 生成一个 [0, i] 范围内的随机整数
            const j = Math.floor(Math.random() * (i + 1));
            // 交换元素 childArray[i] 和 childArray[j]
            [childArray[i], childArray[j]] = [childArray[j], childArray[i]];
        }

        // 3. 按新的随机顺序重新设置子节点顺序(改变同级索引)
        for (let i = 0; i < childArray.length; i++) {
            // 设置同级索引 (sibling index),索引值越小,在场景中的显示层级越靠后(可能被遮挡)
            // 这里按打乱后的顺序设置,从0开始。若需反向,可设置为 childArray.length - 1 - i
            childArray[i].setSiblingIndex(i);
        }
    }

标签: none

添加新评论