cocosCreator 之 节点组件
创始人
2025-05-30 23:27:16
0

cocosCreator版本: 3.7


简介

cocosCreator的工作流程是通过节点–组件来实现的,节点作为场景中的基本单位, 而不同功能的组件挂载在节点之上,来完成页面的搭建。

Node1SceneCommponet1_1Commponet1_2Node2Commponet2_1Commponet2_2Node3Commponet3_1Commponet3_2

比如Canvas节点的组成组件部分:

请添加图片描述

UI变换组件画布组件布局组件脚本组件cc.UITransformCanvascc.Canvascc.WidgetmainScene

在cocosCreator中,脚本也可以作为组件嵌入到节点中。每个不同功能的节点都是由各种组件组成。

比如,Sprite节点的组成组件部分:
请添加图片描述
比如,Button节点的组成组件部分:

简单的理解就如官方文档所说: 场景由多个节点构成,节点作为实体,不同功能的组件挂载到节点上。参考:节点和组件


![请添加图片描述](https://img-blog.csdnimg.cn/706f122971044b23b09ec9a28c48e0c0.png)

脚本访问节点

在组件脚本中,访问当前脚本的所在节点,我们可以使用通过this.node访问。

基本属性:
请添加图片描述

  • postion 节点位置相关,使用方法:
// 通过接口方法使用
this.node.setPosition(100, 50, 0);
this.node.setPosition(new Vec3(100, 50, 0));
// 通过变量使用
this.node.position = new Vec3(100, 50, 0);
  • rotation 节点旋转相关,使用方法:
this.node.setRotationFromEuler(90, 0, 0);
  • scale 节点缩放相关,使用方法:
this.node.setScale(2, 2, 2);

常用属性:

  • 激活相关
this.node.active = true;				// 激活节点
this.node.active = false;				// 

激活后的节点,该节点和所有子节点上的组件都会被启用

  • 节点是否有效相关
// 通常用于检测节点是否销毁的判定
let isValid = this.node.isValid;
  • 获取节点的子节点相关
let children = this.node.children;				// 获取子节点的数组相关,不包含子节点的子节点
let length = this.node.children.length;		// 获取子节点的数量
  • 更换节点的父节点相关
// 父节点为parentNode, 子节点为this.node
// 方法1
this.node.parent = parentNode;
// 方法2, 注意removeFromParent的参数要为false, 否则会清空节点上绑定的事件和action等
this.node.removeFromParent(false);
parentNode.addChild(this.node);
  • 创建新节点
let node = new Node("Box");
node.setPostion(0, 0, 0);
// 创建的节点不会主动添加到场景中,需要手动添加
director.getScene().addChild(node);
  • 克隆节点相关,主要接口使用:instantiate
@property(Node)
private bulletNode: Node = null;start() {let scene = director.getScene();let newNode = instantiate(bulletNode);newNode.setPosition(0, 0, 0);scene.addChild(newNode);
}

关于克隆节点相关,也可以通过预制体来构建

@property({type: Prefab})
private bulletNode: Prefab = null; start() {// ...
}
  • 销毁节点相关
// 使用this.node.destory() 
// 它并不是立即被移除,而是在当前帧逻辑更新结束后,执行
this.node.destory()

注意:destoryremoveFromParent二者相比, 后者并不会从内从中释放,引擎内部仍会持有它的数据。

如果一个节点不再使用,就调用它的destory就可以了,否则会导致内存泄漏。


脚本访问节点组件

脚本访问同节点下的其他组件可使用接口:getComponent

// 访问该组件所在的节点
let curNode = this.node; // 访问该节点下下的组件, 脚本也作为组件,使用脚本的名字即可
let label = this.node.getComponent(Label);
let script = this.node.getComponent("MainScene");

脚本访问其他节点或组件, 一般通过属性检查器Property来设定,比如:
请添加图片描述

@property({type: Button, tooltip: "这是一个按钮"})
public backBtn: Button = null!;start() {this.backBtn.position = new Vec3(0, 0, 0);
}

更多参考:访问节点和其他组件


组件

cocosCreator中的组件主要由两大类:

  • 2D渲染组件
  • UI组件

2D渲染组件主要有:

精灵组件文本组件遮罩组件绘图组件富文本组件骨骼组件地图组件Sprite2D渲染组件LabelMaskGraphicsRichTextSpineTiled

UI组件主要有:

画布组件UI变换组件对齐组件容器组件输入组件滚动容器组件进度条组件滑动器组件其他CanvasUI组件UITransformWidgetLayoutEditBoxScrollViewProgressBarSlider...

继承于Componet的类都被称为组件类,其对象被称为组件。需要注意的是:组件的不能由构造函数创建,必须通过节点来创建,这样节点就能够操控组件的生命周期。

@ccclass("MyComponent")
class MyComponent extends Component {// 
}// 创建组件
const componet = this.node.addComponent(MyComponent);
// 销毁组件
this.node.removeComponet(MyComponet);

同一节点上的组件执行顺序按照属性检查器来的排列顺序从上到下的执行, 可以通过齿轮按钮向上移动/向下移动来控制。

如果使用脚本控制的话,可以使用executionOrder来设定,比如:

import { _decorator, Component, Button} from 'cc';
const { ccclass, property, executionOrder} = _decorator;@ccclass('mainScene')
// 数值越小,越先执行。默认为0
// 仅对onLoad, onEnable, start, update, lateUpdate有效, 对onDisable, onDestory无效
@executionOrder(-1)
export class mainScene extends Component {
}

详情参考:组件和组件执行顺序

相关内容

热门资讯

iPhone手机怎么玩安卓系统... 你有没有想过,你的iPhone手机竟然也能玩安卓系统?没错,就是那个一直以来让你觉得遥不可及的安卓世...
平板删安卓系统更新不了,原因及... 最近是不是你也遇到了这样的烦恼?平板电脑上的安卓系统更新不了,是不是让你头疼得要命?别急,今天就来给...
苹果组装机安卓系统卡,卡顿背后... 你有没有发现,最近用苹果手机的时候,有时候系统有点卡呢?这可真是让人头疼啊!你知道吗,其实这背后还有...
安卓系统原生浏览器,功能与体验... 你有没有发现,每次打开手机,那个小小的浏览器窗口总是默默无闻地在那里,陪你浏览网页、搜索信息、看视频...
安卓机如何上苹果系统,跨平台体... 你是不是也和我一样,对安卓机和苹果系统之间的切换充满了好奇?想象你的安卓手机里装满了各种应用,而苹果...
安卓导入系统证书失败,原因分析... 最近在使用安卓手机的时候,你是不是也遇到了一个让人头疼的问题——导入系统证书失败?别急,今天就来给你...
安卓原生系统有哪些手机,盘点搭... 你有没有想过,为什么有些手机用起来就是那么流畅,那么顺心呢?这背后可大有学问哦!今天,就让我带你一起...
安卓系统关机了怎么定位,安卓系... 手机突然关机了,是不是有点慌张呢?别担心,今天就来教你一招,让你的安卓手机即使关机了,也能轻松定位到...
安卓系统游戏加速器,畅享无延迟... 你有没有发现,手机游戏越来越好玩了?不过,有时候游戏体验可能并不那么顺畅,是不是因为手机性能不够强大...
安卓4系统天气功能,尽在掌握 安卓4系统天气功能大揭秘在当今这个数字化的世界里,手机已经不仅仅是一个通信工具,它更是一个集成了各种...
安卓系统如何玩碧蓝幻想,攻略与... 你有没有想过,在安卓系统上玩《碧蓝幻想》竟然可以这么酷炫?没错,就是那个让你沉迷其中的二次元大作!今...
安卓系统搜不到图朵,图朵生成之... 最近是不是你也遇到了这样的烦恼?手机里明明有那么多美美的图片,但是用安卓系统搜索的时候,却怎么也找不...
魁族8刷安卓系统,系统升级后的... 哇,你知道吗?最近在安卓系统圈子里,有一个话题可是引起了不小的轰动,那就是魁族8刷安卓系统。你是不是...
微信正版安装安卓系统,畅享沟通... 你有没有想过,你的微信是不是正版安装的安卓系统呢?这可不是一个小问题哦,它关系到你的微信使用体验和隐...
电视能刷安卓系统吗,电视也能刷... 电视能刷安卓系统吗?揭秘智能电视的无限可能想象你家的电视不再只是用来观看节目的工具,而是变成了一个功...
安卓系统开通通知功能,畅享智能... 你知道吗?最近安卓系统更新后,新增了一个超级实用的功能——开通通知功能!这可是个大喜事,让咱们的生活...
苹果系统安卓爱思助手,系统兼容... 你有没有发现,手机的世界里,苹果系统和安卓系统就像是一对欢喜冤家,总是各有各的粉丝,各有各的拥趸。而...
安卓系统占用很大内存,揭秘内存... 手机里的安卓系统是不是让你感觉内存不够用,就像你的房间堆满了杂物,总是找不到地方放新东西?别急,今天...
安卓系统p30,安卓系统下的摄... 你有没有发现,最近安卓系统P30在手机圈里可是火得一塌糊涂呢!这不,我就来给你好好扒一扒这款手机的那...
siri被安卓系统进入了,智能... 你知道吗?最近科技圈可是炸开了锅,因为一个大家伙——Siri,竟然悄悄地溜进了安卓系统!这可不是什么...