小心 3.6 Mask

在隐藏的情况下修改了锚点导致裁剪不正确了,看了下源码

public onEnable () {
        super.onEnable();
        this._updateGraphics();
        this._enableGraphics();
        this._changeRenderType();
        this.node.on(NodeEventType.SIZE_CHANGED, this._sizeChange, this);
        this.node.on(NodeEventType.ANCHOR_CHANGED, this._anchorChange, this);
        this.node.on(NodeEventType.SIBLING_ORDER_CHANGED, this._siblingChange, this);
        this.node.on(NodeEventType.LAYER_CHANGED, this._layerChange, this);
        this._sizeChange();
        this._siblingChange();
        this._layerChange();
        //_anchorChange呢
    }

其他三个属性变化都有在onEnable时刷新一下,为啥就锚点不刷新 :joy:

1赞

Mask 的问题,在 3.6.1 已按上述方案重构。除了能解决 Mask 子节点的问题外,3.6.1 上 mask 还能和 Sprite/Graphics 组件一起使用,所以支持了以下的特性:

  • Sprite 指定 fill 模式的话,能实现类似 Fill 模式的 Mask 效果,对做一些技能遮罩应该会比较友好
  • Sprite/Graphics 可以指定材质,材质中可以做更多自定义的效果

3.6.1 测试版什么时候发?

有没有计划基于 shader 的 “soft mask” 啊… 现在这种基于 stencil 的方案, 效果很难让人满意.

3.6.1 正式版本已发,此问题已解决

Graphics 对象很吃显存。我界面上有1100个左右的圆形头像,使用了Mask+Graphics,吃了2.6G的显存:
image
看来必须得换一种方式现实圆形头像,比如Sprite。

Graphics中的activeSubModel函数,申请了一大块显存,这个设计简单粗暴,适合Graphics对象不是很多的场合,不适合大量使用。

对了,ccc 版本 3.8.2 测试版。

1赞