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

顶一下,顶一下

我看一下

因为同时选择了 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版本修复了

正式版什么时候发布?

已经有RC版了 你可以先试试

好像不大行呢,我横竖屏切换还是出现了mask之外的部分

官方demo稍微修改一下就出现问题,2.0.9和2.0.10都有这个问题,求修复,必定重现

没人回复 我一天来问一遍:grin:

将demo background上面的sprite直接删了,换成mask,然后在场景中创建个100*100的节点上面挂mask组件,然后将cocos(就是那个logo图片),拖成新建mask的子节点,竖屏进游戏然后横屏bug就出现了。有木有人跟进一下?