动态加载spriteFrame需重新设置node的size

如题,用代码创建节点,设置节点size后给其添加sprite组件,并设置spriteFrame,之后节点size会变为spriteFrame的原始size,需要重新设置。求问大神有没有办法解决这个问题

var courseMainNode = new cc.Node('mainNode'); //课件根节点

courseMainNode.parent = parentNode;

courseMainNode.width = parentNode.width;
courseMainNode.height = parentNode.height;

cc.loader.load('/Users/yamato/Documents/package/course_bg.png', function (err, tex) {
    if (err) {
            cc.error('load img error:' + err);
            return;
    } else {
            cc.log('load img success');

            var sp = courseMainNode.addComponent(cc.Sprite);

            sp.spriteFrame = new cc.SpriteFrame(tex);

            sp.type = cc.Sprite.Type.SIMPLE;

            sp.sizeMode = cc.Sprite.SizeMode.CUSTOM;

           //再次设置node的Size
            courseMainNode.width = parentNode.width;
            courseMainNode.height = parentNode.height;

    }
});
    cc.loader.load('/Users/yamato/Documents/package/course_bg.png', function (err, tex) {
            //添加按钮
            var startButton = new cc.Node('startButton');
            courseMainNode.addChild(startButton);

            startButton.addComponent(cc.Button);

            startButton.addComponent(cc.Sprite);

            //startButton: (10,10)

            startButton.getComponent(cc.Sprite).spriteFrame = new cc.SpriteFrame(tex);

            //startButton: (1590, 1166) 图片的原始尺寸

            startButton.width = 30;
            startButton.height = 30;
    })

试试在这个节点下面加个子节点,子节点里才添加sprite组件和设置spriteFrame

只要用cc.loader.load动态设置节点sprite组件的spriteFrame,节点大小就会改变,子节点上设置spriteFrame也会改变。

同问,我也发现了这个问题,我目前就是赋值spriteFrame前,先把原来节点的size 存下来,赋值后再把这个size 设置上去

要先设置sizeMode为custom,再设置spriteFrame

1赞

Sprite 组件的 size mode 设为 custom 不就好了吗?

2赞

实测没用,不管你怎么设置编辑器里,代码,都会变的。只能自己改大小