创建的节点不显示

  • Creator 版本:2.4.5

在脚本里创建节点,log里边看节点的属性都配置成功了但是就不显示,不知道为啥,下边是代码
creatBg() {
let node = new cc.Node(‘bg’);
let widget = node.addComponent(cc.Widget);
let width = this.node.width;
let height = this.node.height;
widget.isAlignTop = true;
widget.isAlignLeft = true;
widget.top = 0;
widget.left = 0;
node.setAnchorPoint(0, 1);
node.color = new cc.Color(230, 206, 172);
node.width = width;
node.height = height;
node.parent = this.node;
},
在onload里边调用了这个方法,但是没有显示

先屏蔽Widget组件看能否显示, 第二步再用Widget做适配逻辑

试过了,也还是不行,就试了一下最基本的方式,也还是不显示,不知道问题出在哪
onLoad() {
let node = new cc.Node(‘bg’);
let sp = node.addComponent(cc.Sprite);
node.parent = this.node;
node.width = 100;
node.height = 100;
node.color=new cc.Color(150,120,48);
},
color这里设置不设置都试了一下,都不显示

论坛很多去搜搜把,设置layer

我看官方api文档里边,2.4.5版本里边都没有layer的内容,这个大概是怎么用的

node.layer = 1<<25;

我看文档里边node下没有layer这个属性,是不是用zIndex这个属性代替了

group:变更为 layer

看起来,没给 sprite 设置 spriteFrame。

只是创建一个默认的白色的节点的话,spriteframe应该怎么设置呢,我百度了一下,用texture2d的initWithData,目前还是没有成功

拿到默认单色精灵的texture就好了

给场景上,绑定一个spriteFrame,或者动态获取一个sprite的spriteFrame ,将这个spriteframe 赋值给你新建的sprite。

你这个加了sprite, 但是spriteFrame呢?没有spriteFrame当然不显示啊

如果只想用rgb给这个节点设置一个颜色,要怎么设置到spriteframe里边呢

百度找了一个texture2D.initWithData 的方法给设置到spriteframe里边也还是不行,就想实现不用图片,只通过rgb来给节点设置图案,texture2d的那个方法也没有实例,还没太整明白要怎么用

要在编辑器里先创建一个单色精灵吗?

https://docs.cocos.com/creator/manual/zh/scripting/dynamic-load-resources.html?h=spriteframe

创建有图片的节点没有问题,现在就是想创建不是图片的,而是用rgb设定color的节点,比如白色或者绿色的一个节点,不走资源管理器,单通过代码创建

最后找到了结果,原理确实是需要给节点设置一个spriteframe,但是不用图片就需要用 Texture2D.PixelFormat生成一个texture给spriteframe,如果想实现同样效果的同学可以参考下边的代码
var imgWidth = 200;
var imgHeight = 200;
var count = imgWidth * imgHeight * 4;
var imgData = new Uint8Array(count);
for (var j = 0; j < count; j += 4) {
imgData[j] = 255;
imgData[j + 1] = 255;
imgData[j + 2] = 255;
imgData[j + 3] = 255;
}

    var myTexture2D = new cc.Texture2D();
    myTexture2D.initWithData(imgData, cc.Texture2D.PixelFormat.RGBA8888, imgWidth, imgHeight);

    var node = new cc.Node('测试图片');
    node.width = imgWidth;
    node.height = imgHeight;
    node.parent = this.node;

    var sprite = node.addComponent(cc.Sprite);
    sprite.spriteFrame = new cc.SpriteFrame();
    sprite.spriteFrame.setTexture(myTexture2D);

对Unit8Array这个JS方法不熟,就是参照网上帖子的代码改的,但是确实可以实现。

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。