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
    ______________________________________________________
    *//
  • 相关阅读:
    BZOJ3585&3339mex——主席树
    BZOJ1926[Sdoi2010]粟粟的书架——二分答案+主席树
    BZOJ2662[BeiJing wc2012]冻结——分层图最短路
    BZOJ1433[ZJOI2009]假期的宿舍——二分图最大匹配
    BZOJ1087[SCOI2005]互不侵犯——状压DP
    BZOJ4808马——二分图最大独立集
    BZOJ3175[Tjoi2013]攻击装置——二分图最大独立集
    BZOJ3524[Poi2014]Couriers——主席树
    BZOJ4010[HNOI2015]菜肴制作——拓扑排序+堆
    BZOJ2588Count on a tree——LCA+主席树
  • 原文地址:https://www.cnblogs.com/kingBook/p/5084740.html
Copyright © 2011-2022 走看看