节点管理
类似HTML,整个HTML由各种节点组成,根节点就是HTML标签,然后下面就是各个子节点,然后子节点再套子节点,形成了一个节点树,然后浏览器依据这个节点树进行渲染,然后就把我们需要的页面渲染出来,Laya 其实也是一样,不同的组件和场景组成了一个节点树,交给Laya 引擎渲染。
节点是项目开发的基础,只有充分了解如何操作节点,才能更快的实现复杂的需求。每个节点组件类都是继承自Node类,Node类是可放在显示列表中的所有对象的基类。该显示列表管理 Laya 运行时中显示的所有对象。使用 Node 类排列显示列表中的显示对象。Node 对象可以有子显示对象。
下面来熟悉一下Node类的所有基础的功能
-
添加子节点addChild(node:Node)
Section titled “添加子节点addChild(node:Node)”
在不考虑层级的情况下,我们可以给某个节点添加子节点,可让子节点跟随父节点显示与否,移动,以及方便管理。添加的子节点会加到所有子节点的最后面。
-
添加子节点到指定的索引位置addChildAt(node:Node, index:number)
Section titled “添加子节点到指定的索引位置addChildAt(node:Node, index:number)”
往往要考虑到节点的层级关系或者说遮挡关系,并且已经了解到需要添加到指定的层级位置可使用此方法
-
批量添加子节点addChildren(…args:any)
Section titled “批量添加子节点addChildren(…args:any)”
直接把一组子节点按顺序添加到父节点下,相当于循环调用一次addChild子节点
-
根据名字,获取子节点对象getChildByName(name: string)
Section titled “根据名字,获取子节点对象getChildByName(name: string)”
当我们知道某个节点的名字时,可以用个此方法找到父节点下一级的某个子节点
-
根据子节点的索引位置,获取子节点对象getChildAt(index:number)
Section titled “根据子节点的索引位置,获取子节点对象getChildAt(index:number)”
当我们知道某个节点的索引位置时,可以用个此方法找到父节点下一级的某个子节点
-
根据子节点对象,获取子节点的索引位置getChildIndex(node:Node)
Section titled “根据子节点对象,获取子节点的索引位置getChildIndex(node:Node)”
当我们想知道某个节点的索引位置时,可以用个此方法可获取子节点
-
获取子节点对象数量numChildren
Section titled “获取子节点对象数量numChildren”
通过调用父节点的numChildren属性,可以获得父节点下一级的所有子节点的数量,可用来遍历所有子节点使用,注意不包括子节点下的子节点
-
获取父节点对象parent
Section titled “获取父节点对象parent”
通过调用子节点的parent属性,可以直接获取父节点
-
当前容器是否包含指定的节点对象contains(node: Node)
Section titled “当前容器是否包含指定的节点对象contains(node: Node)”
判断一个节点下是否包含某个子节点,可以使用此方法,注意此查找过程会遍历所有嵌套的子节点
-
检查本节点是否是某个节点的上层节点isAncestorOf(node: Node)
Section titled “检查本节点是否是某个节点的上层节点isAncestorOf(node: Node)”
-
设置子节点的索引位置setChildIndex(node:Node,index:number)
Section titled “设置子节点的索引位置setChildIndex(node:Node,index:number)”
如果想改变子节点的显示层级,可以调用此方法,注意index超出父节点的所有节点数会抛出异常
-
传入新节点替换到已有子节点索引位置replaceChild(newNode: Node, oldNode: Node)
Section titled “传入新节点替换到已有子节点索引位置replaceChild(newNode: Node, oldNode: Node)”
如果想用新的节点替换某个已有节点,可以调用此方法,注意原有的子节点将会被移除,但不会销毁
-
删除子节点removeChild(node: Node)
Section titled “删除子节点removeChild(node: Node)”
删除子节点的时调用此方法,注意子节点将会被移除,但不会销毁
-
从父容器删除自己removeSelf()
Section titled “从父容器删除自己removeSelf()”
在不需要知道父节点的情况下,调用此方法可直接从父节点删除自己,此方法使用频率比较多
-
根据名字删除对应子节点removeChildByName(name: string)
Section titled “根据名字删除对应子节点removeChildByName(name: string)”
当我们知道某个节点的名字时,可以用个此方法从父节点删除子节点
-
根据索引位置删除对应子节点removeChildAt(index: number)
Section titled “根据索引位置删除对应子节点removeChildAt(index: number)”
当我们知道某个节点的索引位置时,可以用个此方法从父节点删除子节点
-
删除指定索引区间的所有子节点removeChildren(beginIndex?: number, endIndex?: number, destroy?: boolean)
Section titled “删除指定索引区间的所有子节点removeChildren(beginIndex?: number, endIndex?: number, destroy?: boolean)”
此方法可以快速删除指定索引区间的所有子节点