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
______________________________________________________
*//

 

转载于:https://www.cnblogs.com/kingBook/p/5084740.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值