2.1.3升级2.2渲染报错(原因已找到-bug,请引擎组认领)

现象

如题,报错位置和信息,一直报错:_renderComponent 为 null

debug


一更:
发现节点隐藏,用代码设置为显示,之后报错

二更:
隐藏了包含文本节点,才会报错

三更
终于找到 原因 了:
将文本的 enabled 设置为 false,就会报错:

cc.Class({
    extends: cc.Component,

    properties: {
        lb: cc.Label,
    },

    onLoad () {
        this.lb.enabled = false;
    },
});


@jare 请引擎组确认处理~


四更:
不光是 label, sprite也一样会报错,我猜原因应该是初始化时判断 enabeld 为 false,就没有个创建渲染组建,enabled 再次设为 true 时,也没有重新创建

解决方案:
目前的解决方案:搜索 .enabled 替换为 “.node.active”,虽然能解决报错,但设置 active 更耗费性能。希望能帮到遇到同样问题的朋友,如果有更好的解决方案也求分享;
最后,希望引擎组尽快修改这个问题,早点出2.2.1。

1赞

帮你顶上去

没想到居然搞定了:2:都是dalao

已提供解决方案给大家参考,希望对大家有帮助。

1赞

我在 web 上测试了下没问题呀,Sprite 也一样。你能提供一个 demo 吗?

感谢回复,新建helloworld,在onload中加一行代码就出现了:

this.label.enabled = false;

assets.zip (42.4 KB)

    // use this for initialization
    onLoad: function () {
        this.label.string = this.text;
        // this.label.node.active = false;
        this.label.enabled = false;
        cc.log(this.label.enabled);
    },

确实存在问题:

1赞

顶起来

也发现一个此类错误,


初始化prefab的时候,执行此方法,全部false。
而读取服务器状态,控制可用的时候

map_btn1 确实可用了,但是色彩不会改变回来

但如果使用异步,获取服务器信息,到返回的时候调用


就不会出现色彩不恢复的情况

你好,色彩不恢复的问题,能试试这个 PR 吗? https://github.com/cocos-creator/engine/pull/5541 或者提供一个 demo 我们验证看看?

此方法加载prefab,
cc.loader.loadRes(“prolab/UI_World_Detail_hd”, function (err, prefab) {
var newNode = cc.instantiate(prefab);
newNode.getComponent(‘UI_WorldDetailScripts’).initWorldUI(self.selectedLevel,self);
cc.director.getScene().addChild(newNode);
});

UI_WorldDetailScripts的initWorldUI方法中,将按钮 self.map_btn1.interactable = false;

这时可以在initWorldUI同时做个定时器,2秒后 self.map_btn1.interactable = true;(如果将设置false 放在定时器回调中,再设置为true,就能正确的显示色彩)

这时就能重现色彩不会恢复,但按钮可用的情况

感谢反馈,这个问题将会在下个大版本修复。
这个问题仅会发生在当 onLoad 过程中 disable Label 组件时。
目前可以暂时通过以下方法绕过:

  • 将隐藏 Label 的操作由 label.enabled = false; 替换为 label.node.active = false; 或者 label.node.opacity = 0;
1赞

老大,下个版本什么时候发布呢?感觉2.2的BUG有点多,能加速先发布一个已经修复了部分BUG的版本吗?

2.2 还好吧,都不是致命问题。我们会发一个 2.2.1,但是本帖反馈的问题不在修复之内。

2.2.1啥时候发布啊?