Mask的Bug,Demo,附图-比较紧急,希望官方帮忙修复给个PR,谢谢

creator版本:2.0.5 至 2.0.9p1,其它版本没测试

看图,看不清楚的,请右键图片在新的标签页打开就可以看大图了
正常的效果:

错误的效果:

Demo:MaskBug.zip (243.6 KB)

@panda @jare @knox @huanxinyin @zzf_2025

自己顶顶顶

周末在线等回复,很慌:2:

活跃于论坛的BUG老哥:smiling_imp:

蛋蛋的忧伤

顶一下,顶一下

我看一下

因为同时选择了 fitHeight 和 fitWidth , 所以Canvas的长宽会被固定缩放到设计分辨率的长宽,Canvas不能充满整个屏幕。
Canvas外的内容依然会被渲染,这个是当前版本设计如此。

Canvas外的内容是要被渲染的,这是对的,问题是Mask,加了Mask之后导致不应该出现的内容出现了,那个黑色遮罩应该覆盖整个屏幕的,但现在黑色遮罩两边没了。、
你帮忙下载项目看看,理解我说的问题。

mask上面没加widget?

mask不能同级节点不能加widget啊,我只要镂空一个圆,黑色那层节点有加widget的

首先,编辑器上的效果和运行效果就不一致了。
我要的效果是黑色层遮盖整个屏幕(包括Canvas外的),然后在黑色层镂一个洞出来。
现在黑色层因为mask覆盖不到Canvas外了

你的问题可能与他相似
https://forum.cocos.com/t/mask/70365/26?u=337031709
尝试一下这个解决方案。
因为CCMask.js里面Mask的绘制范围写死了,只能是Canvas内,这个问题似乎还没有解决。

可以了
自定义引擎修改CocosCreator\resources\engine\cocos2d\core\components\CCMask下的
this._clearGraphics.rect(0, 0, cc.visibleRect.width, cc.visibleRect.height);
传入4个较大的参数,可以暂时解决这个问题。

希望官方下个版本能正式修复这个问题。
别人反馈这个问题已经很久了。

@zzf_2025

如果你的项目不需要移动摄像机的同时刷新mask,那么只需要这样改一下就可以。

let deviationX = (cc.view.getVisibleSize().width - cc.view.getFrameSize().width) / 2;
this._clearGraphics.rect(-deviationX, 0, cc.visibleRect.width + deviationX * 2, cc.visibleRect.height);

我的项目不是静态的,有滚屏场景,只不过用到mask的地方一般是UI界面

嗯,好吧。

我在2.0.9自定义引擎做了修正,修正方式是当视窗范围有变动时,更新mask clearGraphics的大小。
有需要的人可以参考附件,解压后请放到以下位置。

cocos2d/core/components/CCMask.js
cocos2d/core/platform/CCView.js

fix.zip (17.4 KB)

这个问题在2.1.1版本修复了

正式版什么时候发布?