canvas版像素碰撞

2017-12-28  本文已影响42人  bo_bo_bo_la

canvas像素碰撞思路:

canvas像素碰撞解释:

    <script type="text/javascript">
        var canvas = document.getElementById("myCanvas");
        var context = canvas.getContext("2d");
        var img = new Image();
        img.src = "../../canvas进阶/55.png";
        var img2 = new Image();
        img2.src = "../../file/Play.png";
        function Rect(x,y,w,h){
            this.x = x;
            this.y = y;
            this.w = w;
            this.h = h;
        }
        img.onload = function(){
            context.beginPath();
            context.drawImage(img,0,0);
            var rect1 = new Rect(0,0,img.width,img.height);
            canvas.onmousedown = function(){
                canvas.onmousemove = function(e){
                    context.clearRect(0,0,canvas.width,canvas.height);
                    var ev = window.event || e;
                    var x = ev.clientX - canvas.offsetLeft;
                    var y = ev.clientY - canvas.offsetTop;
                    context.drawImage(img,0,0);
                    context.drawImage(img2,x,y);
                    var rect2 = new Rect(x,y,img2.width,img2.height);
                    var nrect = isCrash(rect1,rect2);
                    if(nrect.judeg){
                        console.log("普通碰撞");
                        context.drawImage(img,0,0);
                        var imgData1 = context.getImageData(nrect.res.x,nrect.res.y,nrect.res.w,nrect.res.h);
                        context.clearRect(0,0,canvas.width,canvas.height);
                        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){
                            if(imgData1.data[i+3] > 0 && imgData2.data[i+3] > 0){
                                console.log("像素碰撞");
                                break;
                            }
                        }
                    }
                }
            }
            document.onmouseup = function(){
                canvas.onmousemove = "";
            }
        }
        function isCrash(rect1,rect2){
            var nMinx = Math.max(rect1.x,rect2.x);
            var nMiny = Math.max(rect1.y,rect2.y);
            var nMaxx = Math.min(rect1.x+rect1.w,rect2.x+rect2.w);
            var nMaxy = Math.min(rect1.y+rect1.h,rect2.y+rect2.h);
            var nrect = new Rect(nMinx,nMiny,(nMaxx - nMinx),(nMaxy - nMiny));
            if(nMaxx > nMinx && nMaxy > nMiny){
                return {
                    judeg: true,
                    res: nrect
                };
            }else{
                return {
                    judeg: false
                }
            }
        }
    </script>

上一篇 下一篇

猜你喜欢

热点阅读