动态增加的精灵没法居中

那天谈到模态窗口的问题,有朋友说要用个纯色的背景放大到全屏,我就试着动态生成一个sprite,就用了helloworld里面的那个helloworld的图片动态生成,然后增加到当前场景中,因为是要很多场景用的,所以要动态生成。代码如下:
onLoad: function() {
cfg.Game = new Game();

    var me = this;
    cc.loader.loadRes("HelloWorld", cc.SpriteFrame, function(err, spriteFrame) {
        if (err)
            throw err;
        me.sprMaskBack = new cc.Node('sprMaskBack');
        var sp = me.sprMaskBack.addComponent(cc.Sprite);
        sp.type = cc.Sprite.Type.SLICED;
        sp.spriteFrame = spriteFrame;
        me.sprMaskBack.width=1920;
        me.sprMaskBack.height=1200;
        cc.director.getScene().addChild(me.sprMaskBack);
        me.sprMaskBack.setPosition(0, 0);
    });
},

运行后,helloworld的图片被放到了左下角,但是如果我用场景里的背景图作为父节点添加则会居中,不知道要怎么设置,因为是所有的场景都要用,所以想用当前场景去添加。

你是直接把精灵添加到场景中,世界坐标系的原点在左下角(0,0),所以你背景位置为0,0的时候也在左下角,你需要居中的话,需要setPosition为屏幕宽高的各一半,或者把你的背景的锚点也设置为0,0的位置(也就是左下角)

还有你这个helloworld的图应该是用来测试的吧?我说的图是另外一张

这张2*2的纯色图片,你需要先设置成这样

然后右上角保存,之后创建为精灵,设置type为sliced才有效

还有这个窗口个人觉得用prefab更好

先编辑好你需要的窗口的样式,排版,设置为prefab,需要的时候直接实例一个窗口出来,代码更改其中需要更改的内容就行了

如果像你这样代码创建窗口的背景,底框,内容,这样的话相对来说比较麻烦一点

我试试先,那天我就是用的prefab,怎么样也不成功,所以才先用个helloworld的图片试一试。

prefab应该是没有问题的,我第一次用的时候被坑的太惨了,因为prefab的位置设置为负数,结果实例出来后怎么也看不到,后来zilong大大告诉我是位置没有设置正确:joy:

一般prefab编辑的时候把x和y都设置为0,0,然后需要保存