(四)常用節(jié)點(diǎn)和組件接口
在通過(guò)訪問(wèn)節(jié)點(diǎn)和組件介紹的方法獲取到節(jié)點(diǎn)或組件實(shí)例后勃刨,這篇文章將會(huì)介紹通過(guò)節(jié)點(diǎn)和組件實(shí)例可以通過(guò)哪些常用接口實(shí)現(xiàn)我們需要的種種效果和操作衅澈。這一篇也可以認(rèn)為是 cc.Node 和 cc.Component 類的API閱讀指南悯搔,可以配合 API 一起學(xué)習(xí)理解斩萌。
節(jié)點(diǎn)狀態(tài)和層級(jí)操作
假設(shè)我們?cè)谝粋€(gè)組件腳本中置吓,通過(guò) this.node 訪問(wèn)當(dāng)前腳本所在節(jié)點(diǎn)护姆。
關(guān)閉/激活節(jié)點(diǎn)
this.node.active = false;
該操作會(huì)關(guān)閉節(jié)點(diǎn)修械,當(dāng)該節(jié)點(diǎn)的所有父節(jié)點(diǎn)都激活把鉴,將意味著:
在場(chǎng)景中隱藏該節(jié)點(diǎn)和所有子節(jié)點(diǎn)
該節(jié)點(diǎn)和所有子節(jié)點(diǎn)上的所有組件都將被禁用仆潮,也就是不會(huì)再執(zhí)行這些組件中的 update 中的代碼
這些組件上如果有 onDisable 方法宏蛉,這些方法將被執(zhí)行
this.node.active = true;
該操作會(huì)激活節(jié)點(diǎn)遣臼,當(dāng)該節(jié)點(diǎn)的所有父節(jié)點(diǎn)都激活性置,將意味著:
在場(chǎng)景中重新激活該節(jié)點(diǎn)和所有子節(jié)點(diǎn),除非子節(jié)點(diǎn)單獨(dú)設(shè)置過(guò)關(guān)閉
該節(jié)點(diǎn)和所有 active 的子節(jié)點(diǎn)上的所有 enabled 的組件都會(huì)被啟用揍堰,他們中的 update 方法之后每幀會(huì)執(zhí)行
這些組件上如果有 onEnable 方法鹏浅,這些方法將被執(zhí)行
更改節(jié)點(diǎn)的父節(jié)點(diǎn)
假設(shè)父節(jié)點(diǎn)為 parentNode嗅义,子節(jié)點(diǎn)為 this.node
您可以:parentNode.addChild(this.node)
或this.node.parent = parentNode
這兩種方法是等價(jià)的。
索引節(jié)點(diǎn)的子節(jié)點(diǎn)
this.node.children 將返回節(jié)點(diǎn)的所有子節(jié)點(diǎn)數(shù)組隐砸。
this.node.childrenCount 將返回節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)量之碗。
注意 以上兩個(gè) API 都只會(huì)返回節(jié)點(diǎn)的直接子節(jié)點(diǎn),不會(huì)返回子節(jié)點(diǎn)的子節(jié)點(diǎn)季希。
更改節(jié)點(diǎn)的變換(位置褪那、旋轉(zhuǎn)、縮放式塌、尺寸)
更改節(jié)點(diǎn)位置
分別對(duì) x 軸和 y 軸坐標(biāo)賦值:
this.node.x = 100; this.node.y = 50;
設(shè)置 position 變量:
this.node.position = cc.p(0, 0);
使用 setPosition 方法:
node.setPosition(cc.p(0, 0)); node.setPosition(0, 0);
以上兩種用法等價(jià)博敬。
更改節(jié)點(diǎn)旋轉(zhuǎn)
this.node.rotation = 90;
或
this.node.setRotation(90);
更改節(jié)點(diǎn)縮放
this.node.scaleX = 2; this.node.scaleY = 2;
或
this.node.setScale(2); this.node.setScale(2, 2);
以上兩種方法等價(jià)。setScale 傳入單個(gè)參數(shù)時(shí)峰尝,會(huì)同時(shí)修改 scaleX 和 scaleY
更改節(jié)點(diǎn)尺寸
this.node.setContentSize(100, 100); this.node.setContentSize(cc.p(100, 100));
或
this.node.width = 100; this.node.height = 100;
以上兩種方式等價(jià)偏窝。
更改節(jié)點(diǎn)錨點(diǎn)位置
this.node.anchorX = 1; this.node.anchorY = 0;
或
this.node.setAnchorPoint(1, 0);
注意以上這些修改變換的方法會(huì)影響到節(jié)點(diǎn)上掛載的渲染組件,比如 Sprite 圖片的尺寸武学、旋轉(zhuǎn)等等祭往。
顏色和不透明度
在使用 Sprite, Label 這些基本的渲染組件時(shí),要注意修改顏色和不透明度的操作只能在節(jié)點(diǎn)的實(shí)例上進(jìn)行火窒,因?yàn)檫@些渲染組件本身并沒(méi)有設(shè)置顏色和不透明度的接口硼补。
假如我們有一個(gè) Sprite 的實(shí)例為 mySprite,如果需要設(shè)置它的顏色:
mySprite.node.color = cc.Color.RED;
設(shè)置不透明度:
mySprite.node.opacity = 128;
常用組件接口
cc.Component 是所有組件的基類沛鸵,任何組件都包括如下的常見(jiàn)接口(假設(shè)我們?cè)谠摻M件的腳本中括勺,以 this 指代本組件):
this.node:該組件所屬的節(jié)點(diǎn)實(shí)例
this.enabled:是否每幀執(zhí)行該組件的 update 方法,同時(shí)也用來(lái)控制渲染組件是否顯示
update(dt):作為組件的成員方法曲掰,在組件的 enabled 屬性為 true 時(shí)疾捍,其中的代碼會(huì)每幀執(zhí)行
onLoad():組件所在節(jié)點(diǎn)進(jìn)行初始化時(shí)(創(chuàng)建之后通過(guò)設(shè)置父節(jié)點(diǎn)添加到節(jié)點(diǎn)樹)執(zhí)行
start():會(huì)在該組件第一次 update 之前執(zhí)行,通常用于需要在 onLoad 初始化完畢后執(zhí)行的邏輯栏妖。