刮一刮游戏

作者: _小田 | 来源:发表于2018-02-04 14:51 被阅读12次

话不多说,附上 demo (记得切换手机预览,刮一刮)

下面是效果图

效果图
效果图
效果图

布局样式很简单,就没截图贴出来,发一个比较关键的style样式

#guajiang {
    width: 240px;
    height: 65px;
    background: url(./img/result.png) no-repeat center;
    background-size: cover;
    margin: 0 auto;
}

然后通过js给结果添加一层颜色,这样让用户看不见,只有在刮的时候才能看见奖项

let 语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。
let允许你声明一个作用域被限制在块级中的变量、语句或者表达式。与var关键字不同的是,它声明的变量只能是全局或者整个函数块的。--JavaScript | MDN

(妈个鸡,就是声明变量,废话真多)

let canvas = document.getElementById('mask')
let context = canvas.getContext('2d')
context.fillStyle = '#d1d1d1' // 设置填充浅灰色
context.fillRect(0, 0, 240, 65) // 填充改颜色,覆盖下方背景图片

我们需要让用户手指在刮奖区域移动时候刮掉相应的区域,运用Canvas中globalCompositeOperation属性设置为destination-out,在已经填充颜色的时候再次绘制时,然后绘制的区域就会变得透明

context.globalCompositeOperation = 'destination-out'

(简单解释就是,手指移到哪里,哪里就透明so easy)

接下来为画布创建touchmove事件,在画布上面移动时执行方法,绘制相应的圆形,圆形和之前的填充色相互消减,从而擦处灰色图层

canvas.addEventListener('touchmove', function (event) { // 手指在画布上移动时
    event.preventDefault() // 去除默认的响应行为
    let touch = event.touches[0] // 获取触摸的第一个点
    context.beginPath() // 开始路径绘制
    // 所在触摸处绘制圆形 半径20px
    context.arc(touch.pageX - canvas.offsetLeft, touch.pageY - canvas.offsetTop, 20, 0, Math.PI *
        2)
    context.closePath() // 结束路径绘制
    context.fillStyle = '#BDC3C7'  // 选择任意颜色
    context.fill() // 填充颜色
})

触摸点PageX,PageY属性返回的是整个页面的全局坐标,所以需要减去画布的x,y坐标

canvas的arc

context.arc(x,y,r,sAngle,eAngle,counterclockwise)
参数                 描述
x                   圆的中心的 x 坐标。
y                   圆的中心的 y 坐标。
r                   圆的半径。
sAngle              起始角,以弧度计。(弧的圆形的三点钟位置是 0 度)。
eAngle              结束角,以弧度计。
counterclockwise    可选。规定应该逆时针还是顺时针绘图。False = 顺时针,true = 逆时针。

然后需要判断是否刮完,继续在方法里面继续撸

let imgData = context.getImageData(0,0,240,65)  //  获取画布中的所有像素
let pixelsArr = imgData.data // 得到像素字节数据
let loop = pixelsArr.length  // 获取数据的长度
let transparent = 0           // 设置一个变量来记录变为透明度像素点数量
for (let i = 0; i < loop; i+=4 ) {  // 遍历循环每一个像素
    let alpha = pixelsArr[i + 3]  // 获取遍历每一个像素的透明值    
    if(alpha < 10){   // 当透明度小于10时 认为已被擦除
        transparent++       
    }
}
let percentage = transparent / (loop / 4)   // 计算透明像素所有像素中所占比例
if(percentage > .9){  // 比例大于90%
    document.getElementById('status').innerHTML = '刮奖结束!' // 显示刮奖结束字样
}

页面大面积,百分之九十被擦除的时候显示刮奖结束的字样

小案例来自《某书籍》,自己看的pdf的,需要的小伙伴私我吧,点我的账号私信也可以QQ:952822399 ,蟹蟹~~~

相关文章

  • 刮一刮游戏

    话不多说,附上 demo (记得切换手机预览,刮一刮) 下面是效果图 布局样式很简单,就没截图贴出来,发一个比较关...

  • 刮刮刮

    连续三天的大风了,刮得尘土飞扬,刮得柳絮满天飞。 竟有人说喜欢柳絮,说柳絮像雪花,像仙女散花。 它哪里能像仙女散花...

  • 刮刮乐

  • 刮刮乐

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

  • 刮刮乐

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

  • 刮刮乐

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

  • 刮刮乐

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

  • 刮刮乐

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

  • 刮一刮擦除效果

    1.前言 之前需求有个刮一刮出答案的功能,做个记录,希望对需要的同学有帮助。 实现原理 给展示的view添加CAS...

  • canvas制作刮一刮

网友评论

    本文标题:刮一刮游戏

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