其他
刮刮卡大家生活里都使用过,像奖券,优惠券,外卖好评卡什么的。有时候游戏里面也需要用到。Scratch_ticket实现思路一个完整的刮刮卡需要有这三个功能,刮开涂层、刮开比例、重置。整个功能其实是对mask组件的一次深入应用。刮开涂层首先创立一个mask组件,长宽都设置为0,勾选反向遮罩,然后再拖一个涂层的sprite节点作为它的子节点。为什么这样做呢,我先介绍一下遮罩👇mask_intro上面可以很好地看明白,其实遮罩就是一个盖板,盖住了就看不到它的子节点了,但是如果我在遮罩中间掏个洞,那我就可以透过这个洞看到里面的东西。正向遮罩就是我看不到后面的东西,反向遮罩就是我可以看到后面的东西。如果我们把遮罩的长宽都设置为0,那等于这个遮罩什么用都没有,因为它的面积是0,所以它的子节点就能够完全暴露在画面上,所以我们能够看到涂层图片。然后我们把刮的操作理解为更改这个遮罩的形状,本来它的面积是0,但是当用户刮的时候,我就给它赋予一个长宽,比如我把它的长宽变成10,那这个遮罩就从一个点(长宽为0)变成了一个长宽为10的正方形。而我们设置了这个遮罩类型为反向遮罩,所以我们就能透过这个正方形看到刮刮卡底层的内容了。这就解析了为什么我们需要勾选反向遮罩。这两步的图解如下👇step_1&2那问题来了,我在刮的时候,我生成的形状不能是矩形呀,我的动作是不规则的。其实mask是用Graphics实现的,刮的动作其实不就是在划线吗,所以每次刮的时候,我们只需要记录当前点和上一个点,调用moveTo和lineTo把用户的滑动轨迹画出来就可以了。我们在touch_start的时候只有一个点,那就用circle去画一个圆就可以了。代码如下:touchStartEvent(event)