直接用 mask 里面的 _graphics,不要自己创建
但是mask 里面的 _graphics为null啊!
看源码,mask._graphics
是有生命周期的,不是随时能获取到,但cc.Mask还是通过rect和ellipse方法去画遮罩的。所以我们的hack做法是,重写一下cc.Graphics.prototype.rect
和ellipse
,在里面抛出一个全局事件。需要自定义遮罩的组件监听这个事件,如果监听到事件时需要自定义的cc.Mask的mask._graphics===抛出事件的graphics
,则控制mask._graphics去绘图即可。
2赞
看来我确实得放弃这个功能,这个做法,超出了我能力范围了。。。
2.0.1发了 请@panda 大神来填坑
1赞
更新了 2.0.1 请@panda 大神来填坑
都2.02了, 请@panda 大神来填坑
官方很忙没空填这个坑了,还是靠自己研究源码吧
都2.07了, 请@panda 大神来填坑
请问这个坑是否填上了呢?遮罩似乎还是不能用~
咋用_graphics啊
2.0.8了, 哈哈
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;
}
我觉得有必要复活这个主题
2.3.3了
this.mask = this.bombMaskNode.addComponent(cc.Mask);
(<any>this.mask)._updateGraphics = () => {
var graphics: cc.Graphics = (<any>this.bombMask)._graphics;
if (!graphics) return;
for (let index = 0; index < this.points.length; index++) {
var p = this.points[index].pos;
var r = this.points[index].r;
graphics.circle(p.x,p.y,r);
}
graphics.fill();
};
之前写过。
代码中 points 是啥属性?
3.几了、做卵咩、饮茶先