Label 通过 instantiate 复制后变成Node,怎么设置string

本人是新人,今天刚学,到现在都没有理解node和label这些的关系,请教一下:

  1. 一个Prefab通过 instantiate 复制后得出了一个 Node,这个Prefab本来就是一个单独的Label,请问怎么设置他的string?比如下面这里的设置就不生效。
    var lbl = cc.instantiate(this.wordPrefab);
    lbl.string = this.input[i];
  1. 我在这个Prefab中加了脚本组件,脚本里面调用函数将自己传递了出去:
    onTouchCancel: function (event) {
        console.log('touch_cancel');
        this.game.onLabelTouchOff(this);
    },

外面的回调函数里面看,这个传过来的参数怎么又变成Label了,需要 label.node 才是node,之前复制的时候不是复制出 Node 来了么,怎么又变成 .node 才是Node了?

    onLabelTouchOff: function (label) {
        for (i = 0; i < this.boxs.length; i++) {
            var box = this.boxs[i];
            if ((box.x - label.node.x)*(box.x - label.node.x) + (box.y - label.node.y)*(box.y - label.node.y) <= this.nearDistance*this.nearDistance) {
                // 挪到对应的box,检查位置是否正确
                if (label.string == this.answer[i]) {
                    // 答案一样,设置过去
                    var x = this.calculatePositionX(i, this.input.length, this.chooseOffset);
                    label.node.setPosition(x, this.boxY, this.zLbl);
                    return;
                }
            }
        }
        // 没挪到位,或者答案错误,重置回去
        var index = this.chooses.indexOf(label.node);
        var x = this.calculatePositionX(index, this.input.length, this.chooseOffset);
        label.node.setPosition(x, this.chooseY, this.zLbl);
    }

内容比较乱,但是我大概明白你的疑问。我简单跟你讲一下他们之间的关系,首先Node是ccc当中的基本单位,他包含一些最基本的元素,父子节点,坐标透明度等等。label是挂载在node上面的一个compont,他具有显示文字功能,就是你的需求,当你需要使用这个功能时,情获取这个组件进行操作。
var label = lbl.getComponent(cc.Label)
labell.string = this.input[i];

1赞

非常感谢!用你的方法试了,成功了!

另外,你说的 node 和 label 的关系也很清晰。谢谢!

因为使用instantiate创建的都是Node对象。Label只是其中的一个组件(Component),楼上的回答已经说得很详细了

补充一点就是:
你在自己写的脚本组件或是Label等系统组件中,使用this访问到的都是组件本身,要想获取到组件依附的节点,就需要使用this.node来获取

1赞