Mask组件不支持动态生成的SpriteFrame

1.初衷

用一个进行过九宫图拉伸的底图对一块区域进行裁剪。

2.做法

将底图设置单独的Group,用一个Camera单独渲染,将结构存到RenderTexture中,生成SpriteFrame,赋值给Mask组件

    start () {
        let texture = new cc.RenderTexture();
        texture.initWithSize(cc.winSize.width, cc.winSize.height);
        this.camera.targetTexture = texture;

        let spriteFrame = new cc.SpriteFrame();
        spriteFrame.setTexture(texture);
        this.wNodeMask.getComponent(cc.Mask).spriteFrame = spriteFrame;
    }

3.结果

如题。

补充:将Inverted设置为True后,反向效果会生效。

所使用素材

结贴

从Inverted属性可用的结果上推测是Camera的stencil属性没有清除,改过之后效果正常。

感言

主题本身是个误会,但是上述内容也能作为9宫图充当裁剪的一个可行思路,大家项目中也许会用到。