当前位置: 首页 > article >正文

cocos creator 3.8 Node学习 3

//在Ts、js中 this指向当前的这个组件实例
//this下的一个数据成员node,指向组件实例化的这个节点
//同样也可以根据节点找到挂载的所有组件
//this.node 指向当前脚本挂载的节点

//子节点与父节点的关系 
// Node.parent是一个Node,Node.children是一个Node[]
// this.node.parent //等同于
console.warn(this.node.parent.name);
// this.node.getParent()
console.warn(this.node.getParent().name);

// this.node.children
this.node.children.forEach(element => {
    console.log("子节点")
    console.log(element.name);
});

// 替换父节点 Node.parent = /Node.setParent(XX)
this.node.parent = this.AddBtn;
console.warn(this.node.parent.name)
// this.node.setParent(value: Node)
this.node.setParent(this.AddBtn);
console.warn(this.node.getParent().name);

//添加节点 使用预制的时候
    @property(Node)
    AddBtn: Node = null!;
    @property(Prefab)
    sprite: Prefab = null!;
// addChild(child: Node)
let tempNode: Node = instantiate(this.sprite);
// addChild有可能造成内存泄露,尤其是加自己玩
this.node.addChild(tempNode);
this.node.children.forEach(element => {
    console.log("子节点");
    console.warn(element.name);
});
// siblingIndex:设置位置,等同于2.x的setIndex(index: number)
// insertChild(child: Node, siblingIndex: number)
this.node.insertChild(tempNode, 0);
this.node.children.forEach(element => {
    console.log("=子节点=");
    console.warn(element.name);
});
// getSiblingIndex()
// setSiblingIndex(index: number)

//节点查找
find() //从1级节点开始查找
getChildByName(name: string)//下级节点
getChildByPath(path: string)//从下级节点开始算起,往下找
// let node = find("Canvas/Test");
// console.log(node)
// node = this.node.getChildByName("Label")
// node.getComponent(Label).string = "哈哈";
// // node = this.node.getChildByName("Label")?.getChildByName("Label"); //等同于下面这一个行代码
// node = this.node.getChildByPath("Label/Label");
// node.getComponent(Label).string = "~哈哈~";

//节点移除
removeFromParent()
removeChild(child: this | Node)
removeAllChildren()
//节点判断
isChildOf(parent: this | Scene | null)
isValid
// let labelNode = this.node.getChildByPath("Label/Label");
// console.log(labelNode.isChildOf(this.node))
// 节点是否销毁
// console.log(this.node.isValid)
//组件查找
//先找节点 再找节点上挂载的组件
// 我测试的结果:挂的BoxCollider 查找Collider一样起效果
//根据类型来查找,需要引入
getComponent<T extends Component>
//根据名字来查找,不需要引入
getComponent(className: string)
getComponents<T extends Component>
getComponents(className: string)
getComponentInChildren<T extends Component>
getComponentInChildren(className: string)
getComponentsInChildren<T extends Component>
getComponentsInChildren(className: string)
//添加移除组件
addComponent<T extends Component>
addComponent(className: string)
removeComponent<T extends Component>
removeComponent(classNameOrInstance: string | Component)
//销毁节点
destroy()
destroyAllChildren()
//事件监听 常用前两
on(type: string | NodeEventType, callback: Function, target?: unknown, useCapture?: boolean)
//this.node.on(Input.EventType.TOUCH_MOVE, this.onTouch, this);
off(type: string | NodeEventType, callback: Function, target?: unknown, useCapture?: boolean)
//this.node.off(Input.EventType.TOUCH_MOVE, this.onTouch, this);
once(type: string | NodeEventType, callback: Function, target?: unknown, useCapture?: boolean)
//通常用非官方分装的EventListener.ts不用这些
emit(type: string, arg0?: any, arg1?: any, arg2?: any, arg3?: any, arg4?: any)
dispatchEvent(event: Event)
hasEventListener(type: string, callback?: Function, target?: unknown)
targetOff(target: unknown)

有时候脑袋一热就问人家,怎么样才能简简单单的组件化开发一款游戏,怎么样才能合理的把你想要的功能代码化,不知道问烦了几个家伙了,经常回复我的就是那个节点有要求,你就单独挂一个脚本,你管它那么多干啥?

有时间就学一下3.x,就是没3D的素材,至于为啥?不透露了


http://www.kler.cn/a/405152.html

相关文章:

  • 冲破AI 浪潮冲击下的 迷茫与焦虑
  • 区块链网络示意图;Aura共识和Grandpa共识(BFT共识)
  • 招商蛇口|在低密园林里,开启生活的“任意门”
  • 科研实验室的数字化转型:Spring Boot系统
  • Tailscale 自建 Derp 中转服务器(全程无 Docker + 无域名纯 IP 版本)
  • 嵌入式系统中QT实现网络通信方法
  • 【spring】spring单例模式与锁对象作用域的分析
  • 【IOS】Undefined symbol: _OBJC_CLASS_$_PAGFile
  • Java通过calcite实时读取kafka中的数据
  • 学习threejs,通过SkinnedMesh来创建骨骼和蒙皮动画
  • WSL2 ubuntu配置redis
  • Simulink学习笔记【PID UG联动仿真】
  • 算法.图论-习题全集(Updating)
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】自定义View
  • 力扣 LeetCode 513. 找树左下角的值(Day8:二叉树)
  • [服务器] 腾讯云服务器免费体验,成功部署网站
  • PBDL (基于物理的深度学习)-Chapter 1
  • 深度学习day2-Tensor 2
  • 【Git】git从暂存区中移除文件
  • 山泽HDMI切换器:提升家庭娱乐与办公体验的利器
  • 支持向量机SVM——基于分类问题的监督学习算法
  • HBase 原理
  • 蓝桥杯每日真题 - 第19天
  • 第27天 安全开发-PHP应用TP 框架路由访问对象操作内置过滤绕过核心漏洞
  • 生产环境centos8 Red Hat8部署ansible and 一键部署mysql两主两从ansible脚本预告
  • 经验笔记:远端仓库和本地仓库之间的连接(以Gitee为例)