用脚本新建并添加的子节点无法设置它的属性

//在canvas上生成200个图片精灵
for (var y = 0; y < 20; y++) {
for (var x = 0; x < 10; x++) {
var node = new cc.Node(10*y+x);//官方文档提供的代码
var sp = node.addComponent(cc.Sprite);//官方文档提供的代码

		sp.spriteFrame = new cc.SpriteFrame(cc.url.raw('Image/c.png'));//考虑到后期所需,这里使用图片路径。
		//node.setPosition(x,y);//测试过,无效。图片在父节点坐标的0,0位置。
			
		node.parent = this.GBG;//添加父节点
		node.runAction(cc.moveTo(cc.Vec2(x*30, y*30)));	//测试过,无效。图片在父节点坐标的0,0位置。
		/*未知原因,此处设置xy无效。图片在父节点坐标的0,0位置。
		node.x = x*15;
		node.y = y*15;
		*/
    	}
	}

问题描述:
我想用脚本创建200个图片精灵,并放到预定的位置。
我测试了所知的几种方法,均无效
因为还在学习阶段,所以不知道问题出在哪个地方
cocos creator版本:v2.0.5
浏览器测试,window10系统。
(原本代码有console.log,这里我删掉了。在浏览器的开发人员工具里,点开输出的cc.node,可以看到里面的x,y属性修改成功了,但是canvas上面显示的位置还是父节点的原点。双击x,y,并手动修改一个值,回车后canvas上的精灵位置能够移动,不再是原点)

人工置顶。。。
问题还没有解决。

有了新的进展。
现在的问题是只有第一个精灵显示并且可以移动位置,之后的没有显示出来。
(因为第一个的位置是0,0。所以之前没有发现。)
理想状态是一个一个排列开来。
现在的状态是只有第一个显示出来并放到了预定的位置。之后的n个图片精灵在输出里的active是true,x,y也都有值。但是在cavas上并没有显示。

你看看你添加节点那儿, 是不是先setPosition, 然后才addChild 让它显示的。如果是,请先addChild, 然后setPosition,应该就好了

是先设置node.parent = 父节点
再设置x,y属性的。

经测试发现,用上述方法新建并添加的图片精灵。首个的width,height会根据图片的大小自动设置。然而第二个的宽高均为零。
发现后添加设置宽高的代码。任然无效。
仅显示第一个图片精灵,后面的有属性但不显示。(后面猜想会不会是挡住了,设置了node.z,node.zIndex,还是无效)

代码: 复制的你的简单改了一下。绑定在Canvas上的

效果图:

结论: 你要不重新试试?

感谢!
我去试试 !

找到问题所在了!
首先我用你的代码,不过这里的代码不同:

发现还是老样子。

之后给这个脚本文件添加了一个属性:

然后:

也就是说完全按你的代码来做,成功了!正常显示了!
也就是说问题出在这一行:

也就是说目前我这种赋值的方法是有问题的!
写到这里的时候我突然想到,把这行代码放在外面,new一次就好,不用new200次。。。然后去测试了一下。。。

成功显示出来。但写到这里我发现这样的话是不能满足我的需求的。

所以又把它放在了for循环里面,结果失败了。
最后我试了一下这个:


也就是说每次用不同的图片文件。
成功了,至此我的需求也能实现了。解决!
问题可能出在for循环里面。我之前了解到,为了优化,各种循环体内的重用数据会放在堆还是栈上。最后每次用不同的图片,可能就不算这个循环体内的高频率使用数据,没有优化,然后就没出问题了。
个人瞎猜,如果有知道这个问题究竟是为什么导致的大神还请指教。
另外感谢@刘磊。没有你的代码我可能不会这样子尝试,也就不会解决这个问题了!