cocos creator1.9.3版本加载图片,导致代码失效bug

  • Creator 版本:1.9.3

  • 目标平台: Web

  • 额外线索:

代码功能是,统一给模式弹框后面添加一个半透明遮罩,用下面写法,加载完图片后。loadRes后面的设置颜色,透明度,包括按钮点击效果丢失。

    let layoutNode = new cc.Node("layoutBg");
    let sprite = layoutNode.addComponent(cc.Sprite);
    let self = this;
    cc.loader.loadRes("ui/Common/singleColor", cc.SpriteFrame, function (err, spriteFrame) {
        if (err !== null){
            console.log(err)
            return
        }
        sprite.spriteFrame = spriteFrame;
    });
    layoutNode.addComponent(cc.Button);
    layoutNode.setColor(cc.Color.BLACK);
    layoutNode.setOpacity(128);
    self.node.addChild(layoutNode,-1);
    var viewSize = cc.view.getVisibleSize();
    layoutNode.setContentSize(viewSize);
    layoutNode.on('click', self._onClickLayoutBg, self);

改成下面写法才可以。

    let layoutNode = new cc.Node("layoutBg");
    let sprite = layoutNode.addComponent(cc.Sprite);
    let self = this;
    cc.loader.loadRes("ui/Common/singleColor", cc.SpriteFrame, function (err, spriteFrame) {
        if (err !== null){
            console.log(err)
            return
        }
        sprite.spriteFrame = spriteFrame;
        layoutNode.addComponent(cc.Button);
        layoutNode.setColor(cc.Color.BLACK);
        layoutNode.setOpacity(128);
        self.node.addChild(layoutNode,-1);
        var viewSize = cc.view.getVisibleSize();
        layoutNode.setContentSize(viewSize);
        layoutNode.on('click', self._onClickLayoutBg, self);
    });

这不是 bug,这是因为资源加载本来就是异步的,也就是回调函数会后执行。你的修改也佐证了这一点。

那我对sprite设置纹理,为什么按钮绑定事件会失效呢?这个怎么解释呢?

不是失效,是换纹理,导致节点大小发生改变了,所以触摸区域发生了变化,换张大点的图,试试就知道。

确实是,换了纹理以后,size重新设置就好了