【源码分享】一个可自由绘图、擦除的脚本

反正闲着也是闲着,不如就分享个脚本吧。反正在这论坛也白嫖这么久了。

用cc.Graphics组件绘制图案,局限性比较大,出于需要,写了这个脚本。

一个完全独立的脚本,功能也很简单:

霸占一块内存,用来存储每个像素点的颜色分量,

可使用任意颜色绘制矩形,三角形,圆,直线等,并顺便统计每种颜色的像素个数。

擦除图案时,设置画板的颜色为透明色再进行绘制即可。

画完后,getData()就能拿到 Uint8Array 数据,想怎么用就怎么用。

【注】:脚本中使用的坐标系为原点在左上角,X轴向右为正,Y轴向下为正。(cocos:你这是在针对我?)

【再注】:传入参数时,坐标需要分开传入x、y的值,颜色需要分开传入R、 G、 B、 A的值。(我就是要针对你们,cc.Vec2和cc.Color。)

相比cc.Graphics,
1:连续绘制内存占用不会上升;(之前用Graphics做一个类似刮刮乐的功能,不clear()的话内存会越画越多)
2:设置透明度为0的颜色后,再绘制形状,就能起到擦除现有图案的效果;(cc.Graphics需要配合cc.Mask使用)
3:可以统计每种颜色的像素的个数。(就是为了一些像判断某个区域是否被某种颜色完全填满的变态需求准备的)
4:使用起来多了一个操作,需要绘制完成后,再获取像素数据,根据引擎来使用,例如cocos中,把数据赋值给cc.Texture2D再显示出来。

好了,啰嗦完毕。源码中都有注释,几个public方法看一下就知道用了。

DrawingBoard.rar (5.2 KB)

51赞

mask

mask

mark

mark,mark

1赞

:3:要不说,跟着大手走,啥都有呢

mark 跟着大佬好乘凉

mark 大佬给力

:wink:

虽然再2.2.2模拟器上有问题,思路是很值得学习

1赞

厉害,学习了1

不错,学习了

麻烦大佬看下,目前这个算法画出来的线会比较毛糙,有锯齿,这个有办法解决吗?谢谢

大佬,你有试过真机调试吗?我真机调试发现在ios上出了bug,安卓没有。主要问题是画画的时候texture会映射出另外一条线,而且会出现闪屏的现象

##mark

mark!!!

1赞

mark !!!

mark!

之前同原理制作过一个课件游戏,可是抗锯齿问题,和笔刷问题没法解决,有什么好办法么。

严格来说,我这个代码的主要目的是为了计算绘制的每种颜色的像素个数的,不是用于绘图的。类似于刮刮乐的功能,它可以精确判断玩家是否已把图片内容全部刮完。
显然,半透明颜色的叠加,和像素个数统计功能会有冲突。
抗锯齿可以在shader里面来处理。