用图片拼接
不行,这满足不了我的需求
有办法的,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.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;
}