发现一个奇怪的情况,有人能解释一下么

修改一个精灵的高度,先把精灵添加进去再修改就能成功,先修改精灵后把精灵添加进去就失败了,是有什么原因在里面?
如图:
原来的高度 240的高度

先修改高度,后把它加进去,结果在预览界面显示是原来的高度,打断点看是修改后的高度,高度不一致,

而我把高度修改放到了下面,显示的结果就正确了

先加进去再修改,和先修改再加进去有区别么?

        /**
         * !#en Height of node.
         * !#zh 节点高度。
         * @property height
         * @type {Number}
         * @example
         * node.height = 100;
         */
        height: {
            get () {
                if (this._sizeProvider) {
                    var h = this._sizeProvider._getHeight();
                    this._contentSize.height = h;
                    return h;
                }
                else {
                    return this._contentSize.height;
                }
            },
            set (value) {
                if (value !== this._contentSize.height) {
                    var sizeProvider = this._sizeProvider;
                    if (sizeProvider) {
                        sizeProvider.setContentSize(sizeProvider._getWidth(), value);
                    }
                    if (CC_EDITOR) {
                        var clone = cc.size(this._contentSize);
                    }
                    this._contentSize.height = value;
                    if (CC_EDITOR) {
                        this.emit(SIZE_CHANGED, clone);
                    }
                    else {
                        this.emit(SIZE_CHANGED);
                    }
                }
            },
        },

看了一下源码可能跟this._sizeProvider有关,没有搜到哪里有给这个变量赋值

搞不明白,好像cocos2d-x就没这个问题,我还是第一次碰到

设置parent不能代替addChild

是这个原因导致的么

刚刚试了一下,换为this.node.addChild(node),还是一样的情况

这是因为设置图片时,会刷新一下参数,变成新的图片参数,所以之前设置的被修改了,

这里设置成custom试下
如果不设置成这个,就先换图再修改参数,把设置参数封装一下,设置完图片再调用一下

我只设置了图的高度,没换其他图,应该没关系吧

这个就是换图呀,之前没图,然后添加就有图了

设置高度就是换图么:joy:之前是有图的,只是没添加进父节点

看错问题了。。。

我现在是修改了高度在添加进父节点,图片预览不是我修改后的高度,是图片本身的高度,我打断点进去看了,图片是我修改后的高度, 但是预览时候是图片本身的高度

而我先添加进父节点,再修改高度,图片预览显示就是我修改后的高度

你是怎么创建的图片?要不你先做个demo上传上来?

我把一个图片变为prefab,直接cc.instantiate初始化

代码是这样的:

var node = cc.instantiate(this.nodePrefab);
node.height = 240;
node.parent = this.node;
预览出现异常, node的高度是图片本来的高度,我打了断点看,node.height就是240

而这样写就正确了

var node = cc.instantiate(this.nodePrefab);
node.parent = this.node;
node.height = 240;
有区别么?

你在prefab 里把图片的model 设置成custom试试

没遇到过这个问题。。

不行,一样

算了,反正没影响,我只要先添加在修改

关注一波