• 精确碰撞检测 bitmapData.hitTest


    如果要检测两个png图(有透明区域)精确碰撞,用bitmapData.hitTest方法:
    1.把两个位图(已放入mc,名叫mc1,mc2)转为bitmap.
    2.利用hitTest方法,接受参数
    1).mc1左上角的位置;
    2).mc1要检测的透明度(0-255);
    3).mc2左上角的位置;
    4).mc2要检测的透明度

    var bmd1:BitmapData = new BitmapData(mc1.width,mc1.height,true,0);
    bmd1.draw(mc1);
    var bit1:Bitmap
    = new Bitmap(bmd1);
    var bmd2:BitmapData
    = new BitmapData(mc2.width,mc2.height,true,0);
    bmd2.draw(mc2);
    var bit2:Bitmap
    = new Bitmap(bmd2);
    //检测相交
    addEventListener(Event.ENTER_FRAME, enterFrame);
    function enterFrame(e:Event):
    void
    {
    mc1.x
    = mouseX;
    mc1.y
    = mouseY;
    if (bmd1.hitTest(new Point(mc1.x,mc1.y),255,bmd2,new Point(mc2.x,mc2.y),255))
    {
    //如果相交返回true
    trace("碰撞");
    mc2.filters
    = [new GlowFilter()];
    }
    else
    {
    mc2.filters
    = [];
    }
    }
    //上面的用255的值是因为想要检测的是mc1中的不透明区与mc2中的不透明区是否碰撞。
    //如果两个都改为0,则是检测完全透明区之间是否碰撞。如果是0和255,则不透明区与透明区之间。

    //上面的代码有个问题:像帮助里说的:bitmapData.hitTest在执行点击测试时,
    //将不会考虑两个对象中任何一个对象的拉伸、旋转或其它变形
    //也就是说就算你旋转了,它也还是认为你没有旋转的那个,
    //注意到draw方法里还有一个参数,叫矩阵

    function hitTest(mc1:MovieClip,mc2:MovieClip):Boolean
    {
    var rect1:Rectangle
    = mc1.getBounds(this);//这里要用rect的宽度才合适了
    //trace(this);
    var bmd1:BitmapData = new BitmapData(rect1.width,rect1.height,true,0);//返回的矩阵也是变化的
    var matrix1:Matrix = mc1.transform.matrix;
    matrix1.tx
    = mc1.x - rect1.x;
    matrix1.ty
    = mc1.y - rect1.y;
    bmd1.draw(mc1);
    var bit1:Bitmap
    = new Bitmap(bmd1);
    var rect2:Rectangle
    = mc2.getBounds(this);
    var bmd2:BitmapData
    = new BitmapData(rect2.width,rect2.height,true,0);
    var matrix2:Matrix
    = mc2.transform.matrix;
    matrix2.tx
    = mc2.x - rect2.x;
    matrix2.ty
    = mc2.y - rect2.y;
    bmd2.draw(mc2,matrix2);
    var bit2:Bitmap
    = new Bitmap(bmd2);
    if (bmd1.hitTest(new Point(rect1.x,rect1.y),50,bmd2,new Point(rect2.x,rect2.y),50))
    {
    trace(
    "碰撞了");
    mc2.filters
    = [new GlowFilter ];
    return true;
    }
    else
    {
    mc2.filters
    = [];
    }
    return false;
    }

  • 相关阅读:
    bwapp之xss(blog)
    渗透测试平台bwapp简单介绍及安装
    用glob()函数返回目录下的子文件以及子目录
    常见编码解码脚本
    生成以指定字符为开头的md5值(6位数字)
    从1到n的阶乘的和(python)
    python循环解码base64
    BASE64编码原理分析脚本实现及逆向案例
    史上最完整的MySQL注入
    初探APT攻击
  • 原文地址:https://www.cnblogs.com/602147629/p/1912953.html
Copyright © 2020-2023  润新知