LazyAn-—CocosCreator小技巧-简单版自定义多边形遮罩

前阵子做了个带有杯子的游戏,各种各样的杯子需要带有指示线;不做处理的时候是这个样子的:

实际开发中需要把两边多余的部分隐藏掉,这时候第一个想到的是应该用Mask来遮罩处理,但是发现Mask组件的三个遮罩类型并不能满足所有情况:

因为杯子原图其实是一个166*166的图,所以遮罩会保留杯子两侧的虚线

后来在引擎CCMask.js

(路径:Creator\2.2.2\resources\engine\bin\.cache\dev\cocos2d\core\components) 源码中发现CCMask 声明了this._graphics

并且执行了_createGraphics方法

在_createGraphics里创建了Graphics组件

了解了之后我们可以在cocos里获取cc.Mask组件的_Graphics,并用Graphics组件的绘图接口来自定义一个形状的遮罩;

首先我们创建一个渲染节点glass,在glass下添加一个子节点(命名:mask),再把红色虚线放在mask节点下,给mask节点挂上Mask组件,再新建一个脚本PolygonMask;

写一个mask方法获取Mask组件的_graphics

mask() {        let graphics = this.node.getComponent(cc.Mask)['_graphics'];    }

获取_graphics之后我们需要一个点数组来绘制自定义多边形遮罩;怎么获取这个点数组呢。想到可以用PolygonCollider组件里的Points多边形顶点数组来代替;给mask节点挂上PolygonCollider组件,我们手动编辑一下,绘制出需要遮罩的轮廓:

然后在代码中获取:

mask() {        let graphicsPosArr = this.node.getComponent(cc.PolygonCollider).points;        let graphics = this.node.getComponent(cc.Mask)['_graphics'];        graphics.clear(false);        graphics.moveTo(graphicsPosArr[0].x, graphicsPosArr[0].y);        for (let i = 1; i < graphicsPosArr.length; i++) {            graphics.lineTo(graphicsPosArr[i].x, graphicsPosArr[i].y);        }        graphics.close();        graphics.stroke();        graphics.fill();    }

在start函数中执行以下mask方法,预览运行:

关注公众号“An的世界” 回复“自定义遮罩”获取示例工程

———————————————————————————————

阅读更多:


CocosCreator小技巧-修改TypeScript默认模板

《合成大西瓜》是怎么做的?还原上头玩法

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值