canvas像素碰撞思路:
- 创建两个图片
- 将第一张图片拷贝到canvas中,带该图片加载完毕之后
- 拖动第二张图片,用于测试像素碰撞
- 像素碰撞的前提必须是先普通碰撞
- 像素碰撞,两个图片交叉的地方,一定存在一个点,在目标图中的透明度不为0,并且在原图中的透明度不为0。
canvas像素碰撞解释:
function Rect(x,y,w,h)
用于后期获取目标图片与原图片交叉所得到的位置,因为canvas没有节点,不能通过节点找到我们想要的东西。context.drawImage(img,0,0);
context.drawImage(img2,x,y);
将两张图片绘制到canvas上- context.drawImage(img,0,0);
var imgData1 = context.getImageData(nrect.res.x,nrect.res.y,nrect.res.w,nrect.res.h);
canvas每次保存最后一个绘画的内容,所以在晴空画布之后重新绘制图片1,并获取到目标图与原图交叉的地方在目标图中的所有像素点。 - context.clearRect(0,0,canvas.width,canvas.height);
与上面一样,canvas只保存最后一次绘制的内容,所以每次要清空画布的时候还有将图片绘制上去context.drawImage(img2,x,y); var imgData2 = context.getImageData(nrect.res.x,nrect.res.y,nrect.res.w,nrect.res.h); context.drawImage(img,0,0);
- for(var i = 0;i < imgData1.data.length;i+=4)
获取到的像素点每4个为一组,即RGBA……一次循环,所以遍历交叉的地方的像素点时,只要遍历没一组中的最后一个值是否大于0,如果大于0 表示该点不是透明色。表明两图像素碰撞
1 | <script type="text/javascript"> |