关于getComponent的问题,请大大回复一下。

疑问,对于getComponent 的使用非常困惑,组件和节点的关系似懂非懂!!!

节点的使用上没太大问题,但是getComponent 似乎只能获得本节点上的【本】身的组件(比如Label,自己的脚本中this指定的应该是组件,this.node才是节点)

问题来了,我在测试的时候,给Canvas添加了一个Button,当然Button节点(我的理解是Button本身是一个节点,上面有个Sprite组件)然后在他的子节点上有一个Label组件。
然后我给Button 添加组件UI,自己写个btn.js。想更改子节点的Label的string

具体怎么触发,我是做了按钮的点击触发的

    var label = this.getComponent(cc.Label);
    label.string ="改名咯";

结果报错label是null
当然我也测试过在 properties 里添加一个 type:cc.Node 的属性,把Label拖动到属性管理器的位置,用下面的方式可行
var label = this.lab.getComponent(cc.Label);
label.string=“改名咯”

我在这里想问的是:如果不再属性面板操作的情况下,该如何获取子节点的Label,甚至其他节点下的,比如canvas下的任意的组件呢??如果都要做拖动操作可能后期维护,或者对于自己程序的更新迭代似乎都有不小的管理麻烦把。

猜测::首先节点Node下可以有很多组件,比如(Button组件) Node下有Node(这个不知道算不算),Sprite,Button,btn.js
除了node可以直接访问和使用外,所有的组件都不能直接访问。所以需要getComponent来获取组件后才能使用。

不知道这样理解对不对?还有如何管理节点下的多组件(或者多同类组件,比如多个Sprite或者Label等)

这个猜测不对,因为同一个Node好像不能添加同类的组件,比如有Sprite组件后不能添加Label。可能同是渲染类组件吧。问题又回到了最上面的帖子上。

想要获取某个节点的某种组件的第一个
someNode.getComponent(ComponentClassName)
想要获取某个节点的某种组件的多个
someNode.getComponents(ComponentClassName)

渲染组件确实不能添加多个
有的组件可以添加多个

this.getComponent 是this.node.getComponent
的缩写格式

获取子节点
someNode.getChildByName(subNodeName)

节点和节点有父子关系 节点和组件有主从关系

有一次性访问所有子节点的某类组件
好像是 getComponentInChild什么的 这个一次都没用过

getComponent 只能获取本节点上的,如果每次都要遍历 children 性能该有多慢……
要获取子节点可以参考 http://www.cocos.com/docs/creator/scripting/access-node-component.html#--6
(当然,你要直接 this.node.children[0] 我也不反对)

这个就见仁见智了

对,Node 就是节点树面板里能看到的东西

有些组件是互斥的,正常