1.前言:
为什么会出现这个需求呢?因为在做一个拼图项目,项目主程说不要用mask呀,一个mask就是两个dc,怕后期会出现性能问题,可能这就是大佬的思维吧,于是乎就想到用shader来切一张图,把他变成很多的碎片。
2.实现
先上图,效果如下:
写一下大致思路吧:
传入两张图片,一张为原图,另一张为需要采样的形状图,锚点定在左上角,方便位置和大小计算,一个切图大小和相对于原图左上角偏移量。
1.contentSize为去一个正方形碎片大小+offset偏移量大小(加上凸起的部分)才是真正的碎片大小,
2.得到碎片大小是原图新的几分之几,都从(0,0)开始算,算uv的比例,
3.采样,根据比例采集大图的部分,把采集的信息给到碎片
具体代码如下:
3.扩展
后面美术给我一个背景框,四个角有事圆弧形,这个时候就想到,那我就把四个角切成弧形就好了。
思路:定义一个圆的半径长,随便取一个uv,利用勾股定理,只要这个点减去半径的长大于半径,就代表在圆外,那就要给他切点呀。直接把它的a=0就好了。下面是把坐标系转成了一样的计算的。
效果图如下:
真正要切哪个角使用cocos材质的setProperty()方法传值就好了。根据传递的值不同来执行上面的某个if语句。