给节点加标签
- 给节点加标签,用于查找一个或大量含有特定标签的节点。
- 标签是通过以特殊格式为节点命名实现的。
带标签的节点命名
- 节点命名中,第一个“?”后面的部分属于标签区域。如上图中,“m=20&s=&x&msg=hello world”就是标签区域。
- 一个标签,通常是以“标签名=标签值”的形式定义,但也可以仅有“标签名=”或“标签名”。
- 一个节点可以被附加多个标签,标签间用“&”隔开。
- 上图中的节点命名含有四组标签,分别是“m=20”、“s=”、“x”、“msg=hello world”,使用
var marks = Utils.node.getMarks(node);
可以获得node上所有标签信息,以上图为例,获得的标签信息marks形式如下:
{ x: '20', s: '', x: null, msg: 'hello world' }
可以观察到,标签值都是以字符串形式存在的,但要注意:若标签形式为“标签名=”,则标签值是空白字符串(如“s=”,得到s: ''),若形式为“标签名”,则标签值为null(如“x”,得到x: null)。
获得节点的标签
- Utils.node.getMarks(node)
收集一个节点(含此节点)及其子孙中含有特定标签的所有节点
- 通过如下代码查找带标签的节点:
var nodesFound = Utils.node.getNodesInHierarchy(node, markName, markValue)
- 前提是要找的节点必须是node本身或其子孙。
- 如上图,假设node为A节点,则:
// 可以获取到[A, C]
var nodesFound = Utils.node.getNodesInHierarchy(node, 'm', 20);
// 可以获取到[D]
var nodesFound = Utils.node.getNodesInHierarchy(node, 'm', '');
// 可以获取到[A, B, C, D]
var nodesFound = Utils.node.getNodesInHierarchy(node, 'm');
// 可以获取到[B, C, D]
var nodesFound = Utils.node.getNodesInHierarchy(node, 'x');
此外,若不指定markName和MarkValue,则可以获得当前节点及所有子孙节点,如:
// 可以获取到[A, B, C, D]
var nodesFound = Utils.node.getNodesInHierarchy(node);
收集一个节点(含此节点)及其子孙中含有特定标签的所有节点的特定组件
- 与上一个应用类似,但不是收集节点,而是收集组件。通过如下代码实现:
var componentsFound = Utils.node.getComponentsInHierarchy(node, componentTypeOrName, markName, markValue);
- 需要注意的事项与收集节点一致,只是多了componentTypeOrName参数。比如收集node下带有标签“m=small”的节点的cc.Sprite组件,则这样写:
var componentsFound = Utils.node.getComponentsInHierarchy(node, cc.Sprite, 'm', 'small');