怎么改变创建出来之后prefab实例内容呢、。

properties: {
    Circle1:{
        default:null,
        type:cc.Sprite,
    },
    Head1:{
        default:null,
        type:cc.Sprite,
    },
    Text1:{
        default:null,
        type:cc.Label,
    },

},大概是这样的一个prefab...

var tPrefab = cc.instantiate(this.myperfab);
// tPrefab.Text1.string = “123”;
tPrefab.parent = this.node;
tPrefab.setPosition(100,100);
然后创建了出来。。。。但是这样创建的 会跟模板一模一样,,,如果我想让他的label显示成“换了一个字”,,,该怎么做呢。。。。。问了一些朋友,说是用getComponent…但是还是不会弄。。。求能用代码。。。。谢谢

看王楠的视频教程去~~~~~~~~~~~~~~·

那个看了…但是 那个视频是在prefab里写的代码,让他随机出现图标和label内容,每次创建prefab然后 会根据代码生成一个随机内容的prefab, 并不能在创建的时候控制 生存的 图标和label内容,…想知道这个是怎么实现的…

就这样就可以了呀,如果你正确挂载了 prefab 内部的 Label,他就会修改 Label 的内容了

我这样写不行…在Prefab里.this.Text1.string 可以, 但是在创建prefab的组件不行,在创建prefab的组件里,我只做了一个 myprefab:{
default:null,
type:cc.Prefabl,
},
还需要怎么做么

var tPrefab = cc.instantiate(this.myperfab);
tPrefab.Text1.string = "123";

应该是这样就可以了,有报错吗?

嗯,有报错,不过这个是在家里弄的,现在公司电脑上没装ccc…暂时看不了报错是啥…

:joy: 有报错就好,等看到错误信息再发出来吧。

这个是在JAVASCRIPT里看到的。。。控制台没报错。。。

我之前也遇到了这个问题,好像有人说prefab(预制资源)不能动态改变,新手一枚也不是懂很多,对prefab的期望的是到底是怎么样的

感觉不能的话就太愚蠢了。。。

这里应该是 instantiate 失败了,要检查一下你的 prefab 包不包含正确的 Label,有没有链接到 Text1 属性上

:joy_cat: 真心找不到原因啊。。。求个能用实例啊。。。

例子里面有很多啊,你要不截一张你的 prefab 的结构图,还有 myprefab 挂载节点的属性 inspector 面板

http://pan.baidu.com/s/1sliRyFj。。压缩上传到网盘 了。。。求带:joy_cat:

我想要做的是,按下“英雄”,,,然后弹出个herolist,然后加载一个prefab,,,,然后修改掉他的label内容,,

哦,我理解了。。。Prefab 是预制类型,并不是一个实际节点,用 cc.instantiate 创建出来的才是一个实际节点。那么问题来了,你用 cc.instantiate 创建节点出来后,要添加到场景中,它才能被显示。

而你的工程中,你拖拽了一个 Prefab 的实例节点到场景中,并认为这个就是 cc.instantiate 得到的结果,其实这两者并没有任何关系。你在场景中放置的节点是一个 Prefab 的实例,用 cc.instantiate 获得的是另一个实例,你把这个实例添加到场景中,就可以看到你修改 string 的结果了。

所以 Prefab 的使用方式是:

  1. 在场景中编辑好一个节点
  2. 拖拽到 Asset 面板中变成一个 Prefab 预制节点
  3. 删除场景中的节点(它只是为了初始编辑),后续编辑可以直接双击 Asset 中的 Prefab
  4. 在代码中动态创建 Prefab 实例节点,并添加到场景中

场景中那个是我放那的。。。是扔到那的。。不用管他。。。。我在代码里创建了的,在CreatHero里,我能对新创建的实例里那个叫Text1的label进行移动,但是却没办法修改它的内容

大神 哪里有实例代码么。。。不要太复杂的。。不然太复杂的 看不懂。。。。

tPrefab.getChildByName(“Text1”).getComponent(cc.Label).string=“123”;
或者
tt1.getComponent(cc.Label).string=“123”;