在 Cocos Creator 中随机打乱子节点的顺序
在 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);
}
}