cocos creator 2.0要怎样才能做一个自定义遮罩

用图片拼接 :stuck_out_tongue_closed_eyes:

不行,这满足不了我的需求:sweat:

有办法的,mask 有一个 _graphics,可以用来绘制遮罩图形,但是我现在没空细说,等我把 2.0.1 发了先

6赞

好吧。。。其实我觉得:既然有这个功能,那干嘛不早点封装出来啊

可否大概说下怎么弄,然后我再自己调试得试试。我现在的理解是可以用一个带graphics组件的节点来绘制我想要的任意多边形图形,然后把这个graphics赋值给mask里面的_graphics,那接下来mask里面是不是也要设置一下其它的什么呢?

直接用 mask 里面的 _graphics,不要自己创建

但是mask 里面的 _graphics为null啊!

看源码,mask._graphics是有生命周期的,不是随时能获取到,但cc.Mask还是通过rect和ellipse方法去画遮罩的。所以我们的hack做法是,重写一下cc.Graphics.prototype.rectellipse,在里面抛出一个全局事件。需要自定义遮罩的组件监听这个事件,如果监听到事件时需要自定义的cc.Mask的mask._graphics===抛出事件的graphics,则控制mask._graphics去绘图即可。

2赞

看来我确实得放弃这个功能,这个做法,超出了我能力范围了。。。

2.0.1发了 请@panda 大神来填坑 :grin:

1赞

更新了 2.0.1 请@panda 大神来填坑

都2.02了, 请@panda 大神来填坑

官方很忙没空填这个坑了,还是靠自己研究源码吧

@panda 来填坑呀,api2.0不能用呀

都2.07了, 请@panda 大神来填坑

请问这个坑是否填上了呢?遮罩似乎还是不能用~

咋用_graphics啊

2.0.8了, 哈哈

https://forum.cocos.com/t/ccc/51528/107?u=2817268478

this.rectList = []
this.binder.multiMask._clippingStencil.clear();
var stencil = this.binder.multiMask._clippingStencil;
let stage = StageManager.getInstance().getCurStage()
for(let i = 0; i < pointList.length; ++i)
{
    let rowCol = pointList[i]
    let col = rowCol[0], row = rowCol[1]
    let pos = stage.getAnimalWorldPos(col,row)
    let x = pos.x
    let y = pos.y
    var color = cc.color(255, 255, 255, 0);
    var rectangle = [cc.v2(x, y),
        cc.v2(x + 72, y),
        cc.v2(x + 72, y + 72),
        cc.v2(x, y + 72)];
    stencil.drawPoly(rectangle, color, 0, color);

    this.rectList.push(cc.rect(x,y,72,72))
}

if (!CC_JSB) {
    cc.renderer.childrenOrderDirty = true;
}