zoukankan      html  css  js  c++  java
  • Box2d FilterData

    Box2D.Dynamics.b2ContactFilter类,碰撞源码:

    public virtual function ShouldCollide(fixtureA:b2Fixture, fixtureB:b2Fixture) : Boolean{
        var filter1:b2FilterData = fixtureA.GetFilterData();
        var filter2:b2FilterData = fixtureB.GetFilterData();
        
        if (filter1.groupIndex == filter2.groupIndex && filter1.groupIndex != 0)
        {
            return filter1.groupIndex > 0;
        }
        
        var collide:Boolean = (filter1.maskBits & filter2.categoryBits) != 0 && (filter1.categoryBits & filter2.maskBits) != 0;
        return collide;
    }

     演示:

    var filter1={categoryBits:0x0001,maskBits:0xFFFF};
    var filter2={categoryBits:0x0001,maskBits:0xFFFF};
    var filter3={categoryBits:0x0001,maskBits:0xFFFF};
    var filter4={categoryBits:0x0001,maskBits:0xFFFF};
    var list:Array=[filter1,filter2,filter3,filter4];
    
    filter1.categoryBits=1<<1;//2
    filter2.categoryBits=1<<2;//4
    filter3.categoryBits=1<<3;//8
    filter4.categoryBits=1<<4;//16
    
    filter1.maskBits=0|4|16;//只和4,16碰撞
    //filter1.maskBits=~(4|16);//不和4,16碰撞
    for(var i:int=0;i<1;i++){
        for(var j:int=0;j<list.length;j++){
            getCollide(list[i],list[j]);
        }
    }
    
    function getCollide(filter1:*,filter2:*):Boolean{
        var collide:Boolean = (filter1.maskBits & filter2.categoryBits) != 0 && (filter1.categoryBits & filter2.maskBits) != 0;
        trace("filter1.categoryBits:"+filter1.categoryBits, "filter1.maskBits:"+filter1.maskBits);
        trace("filter2.categoryBits:"+filter2.categoryBits, "filter2.maskBits:"+filter2.maskBits);
        trace("collide:"+collide);
        trace("______________________________________________________");
        return collide;
    }
    
    /*output:
    filter1.categoryBits:2 filter1.maskBits:20
    filter2.categoryBits:2 filter2.maskBits:20
    collide:false
    ______________________________________________________
    filter1.categoryBits:2 filter1.maskBits:20
    filter2.categoryBits:4 filter2.maskBits:65535
    collide:true
    ______________________________________________________
    filter1.categoryBits:2 filter1.maskBits:20
    filter2.categoryBits:8 filter2.maskBits:65535
    collide:false
    ______________________________________________________
    filter1.categoryBits:2 filter1.maskBits:20
    filter2.categoryBits:16 filter2.maskBits:65535
    collide:true
    ______________________________________________________
    *//
  • 相关阅读:
    [转]《鸟人》想拍个文艺片,为什么要自虐
    [转] Java内部类之闭包(closure)与回调(callback)
    编程模型的笔记
    delphi char数组、string和Pchar的相互转换
    Char 与 Byte
    根据函数名称---函数指针--调用函数
    procedure of object 对象的函数指针
    虚方法、抽象方法、抽象类、重定义、覆盖重写------我自己
    Delphi 中的自动释放策略
    Delphi中设置条件断点
  • 原文地址:https://www.cnblogs.com/kingBook/p/5084740.html
Copyright © 2011-2022 走看看