linux刮刮乐小游戏源代码,HTML5-Canvas实例:刮刮乐游戏

c5f5ad7dcab62982688912a8ac4a79c4.png

实现方法:

(1)利用canvas画布,fillRect()描绘出一个矩形(不是透明),定位盖在某个标签如div上面(这个标签写着中奖的信息)

(2)globalCompositeOperation = 'destination-out';利用此属性,手指划过画布,arc(x,y, radius, 0, Math.PI*2, true)绘画圆形,那么这个圆形会把之前描绘出的矩形穿透,看到div标签的内容

globalCompositeOperation属性:

globalCompositeOperation 属性设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上。

源图像 = 您打算放置到画布上的绘图。

目标图像 = 您已经放置在画布上的绘图。

值描述

source-over

默认。在目标图像上显示源图像。

source-atop

在目标图像顶部显示源图像。源图像位于目标图像之外的部分是不可见的。

source-in

在目标图像中显示源图像。只有目标图像内的源图像部分会显示,目标图像是透明的。

source-out

在目标图像之外显示源图像。只会显示目标图像之外源图像部分,目标图像是透明的。

destination-over

在源图像上方显示目标图像。

destination-atop

在源图像顶部显示目标图像。源图像之外的目标图像部分不会被显示。

destination-in

在源图像中显示目标图像。只有源图像内的目标图像部分会被显示,源图像是透明的。

destination-out

在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。

lighter

显示源图像 + 目标图像。

copy

显示源图像。忽略目标图像。

source-over

使用异或操作对源图像与目标图像进行组合。

如下图,蓝色是目标图像(就是矩形),红色就是源图像(即手指划过的圆形)

113521.htm

1dceabf7f44645278f1df27832e06f6d.png

从图中可以看出,globalCompositeOperation = 'destination-out'就是我们要的属性

例子完整代码:

www.linuxidc.com

.wraper{width: 300px;height: 100px;position: relative;margin: 150px auto;}

.inner{width: 300px;height: 100px;background: #AA0707;color: #fff;font-size: 36px;line-height: 100px;text-align: center;}

#j_canvas{position: absolute;left: 0;top: 0;}

恭喜您中奖www.linuxidc.com

var scratchGame = (function(){

var target = document.getElementById('j_canvas'),

ctx = target.getContext('2d'),

w = target.width,

h = target.height,

radius = 15,

target_offset_x = target.getBoundingClientRect().left,

target_offset_y = target.getBoundingClientRect().top,

isTouch = false;

return{

init:function(){

ctx.fillStyle = '#999';

ctx.fillRect(0, 0,w,h);

//属性设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上。

ctx.globalCompositeOperation = 'destination-out';

// 事件

target.addEventListener('touchstart', this.eventDown,false);

target.addEventListener('touchmove', this.eventMove,false);

target.addEventListener('touchend', this.eventUp,false);

},

eventDown:function(e){

e.preventDefault();

isTouch = true;

},

eventUp:function(e){

e.preventDefault();

isTouch = false;

},

eventMove:function(e){

e.preventDefault();

if(!isTouch||!e.touches.length) return;

var touch = e.touches[0],

x = touch.pageX - target_offset_x,

y = touch.pageY - target_offset_y;

ctx.beginPath();

ctx.arc(x,y, radius, 0, Math.PI*2, true);

ctx.fill();

}

}

})();

scratchGame.init();

--------------------------------------分割线 --------------------------------------

--------------------------------------分割线 --------------------------------------

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值