高级版刮刮乐

作者: bo_bo_bo_la | 来源:发表于2017-12-26 22:22 被阅读23次

判断当刮到一半的时候,自动显示全部内容

globalCompositeOperation

  • source-over 默认。在目标图像上显示源图像。
  • source-atop 在目标图像顶部显示源图像。源图像位于目标图像之外的部分是不可见的。
  • source-in 在目标图像中显示源图像。只有目标图像内的源图像部分会显示,目标图像是透明的。
  • source-out 在目标图像之外显示源图像。只会显示目标图像之外源图像部分,目标图像是透明的。
  • destination-over 在源图像上方显示目标图像。
  • destination-atop 在源图像顶部显示目标图像。源图像之外的目标图像部分不会被显示。
  • destination-in 在源图像中显示目标图像。只有源图像内的目标图像部分会被显示,源图像是透明的。
  • destination-out 在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。
  • lighter 显示源图像 + 目标图像。
  • copy 显示源图像。忽略目标图像。
  • source-over 使用异或操作对源图像与目标图像进行组合。

像素

我们使用getImageData()能够获取指定区域的像素值ImageData
ImageData中3个属性:width,height和data
width和height表示访问像素区域大小
data是一个包含访问区域所有像素信息的CanvasPixeArray

getImageData(x,y,width,height)
  • 获取像素,(x,y)像素区域原点坐标
  • width,height像素区域的宽度和高度"
<script type="text/javascript">
        var canvas = document.getElementById("myCanvas");
        var context = canvas.getContext("2d");
        //目标图
        context.beginPath();
        context.fillStyle = "gray";
        context.fillRect(0,0,canvas.offsetWidth,canvas.offsetHeight);
        context.fill();
        context.globalCompositeOperation = "destination-out";
        canvas.onmousedown = function(e){
            var ev = window.event || e;
            var x = ev.clientX - canvas.offsetLeft;
            var y = ev.clientY - canvas.offsetTop;
            context.beginPath();
            context.moveTo(x,y);
            canvas.onmousemove = function(e){
                var ev = window.event || e;
                var xx = ev.clientX - canvas.offsetLeft;
                var yy = ev.clientY - canvas.offsetTop;
                context.lineTo(xx,yy);
                context.lineWidth = 30;
                context.stroke();
                all()
            }
        }
        function all(){
            var imageData = context.getImageData(0,0,canvas.offsetWidth,canvas.offsetHeight);
            var count = 0;
            for(var i = 0;i < imageData.data.length;i+=4){
                if(imageData.data[i+3] == 0){
                    count++;
                    if(count >= imageData.data.length/16) {
                        context.clearRect(0,0,canvas.offsetWidth,canvas.offsetHeight);
                    }
                }
            }
        }
        document.onmouseup = function(){
            canvas.onmousemove = "";
        }
    </script>

相关文章

  • 高级版刮刮乐

    判断当刮到一半的时候,自动显示全部内容 globalCompositeOperation source-over ...

  • 刮刮乐

  • 刮刮乐

    2007年3月3日,特别的日子。 为啥特别? 第一次坐飞机,青岛飞西安,提前4个小时就到机场了,在网上研究过攻略,...

  • 刮刮乐

    2014年11月3日 刮刮乐 今天杏子又在济南火车站候车了,这次她是故地重游,明显轻松了许多。 ...

  • 刮刮乐

    设置刮开后,显示的文字Label UILabel *label = [[UILabel alloc]initWit...

  • 刮刮乐

    刮刮乐这个东西真的是越刮越快乐,尤其是他给我准备的30张,现在有些喜欢30这个数字了,哈哈哈哈哈! 他给我准备...

  • 刮刮乐

    最近幻想中奖挣大钱的两个人于今晚走进彩票店刮起了刮刮乐,五块钱一张,最后刮了六张,付了十块钱,而我依然是好运绝缘体...

  • 刮刮乐热潮

    近日中国福利彩票在县城体育馆做一个瓜瓜乐的活动,大体内容就是五块钱一张的刮刮乐有机会赢取三十万大奖。而更吸引人的是...

  • 刮刮乐效果

    实现原理: 利用layer的mask遮罩 + 贝塞尔曲线UIBezierPath 关键代码: 效果图:

  • canvas— —刮刮乐

    今天,结合上一篇文章的抽奖小游戏,用canvas来写一个小游戏——刮刮乐。首先,用canvas做一个画布,宽高各为...

网友评论

    本文标题:高级版刮刮乐

    本文链接:https://www.haomeiwen.com/subject/pvaegxtx.html