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;//
filter2.categoryBits=1<<2;//
filter3.categoryBits=1<<3;//
filter4.categoryBits=1<<4;// 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
______________________________________________________
*//

Box2d FilterData的更多相关文章

  1. box2d最大速度限制

    被坑了好几个小时... 原来box2d中限制了最大速度为2m/frame. 参考http://badlogicgames.com/forum/viewtopic.php?f=11&t=6137 ...

  2. 使用 Box2D 做一个 JansenWalker 机器人

    在 Box2DFlash 的官网的首页有一个小 Demo,这个 Demo 中有11个例子,可以通过左右方向键查看不同的例子,里面的每个例子都非常有趣,但最让我感兴趣的,是其中一个叫 JansenWal ...

  3. Box2D自定义重力

    需要给刚体添加一个自定义的属性:m_customGravity,这样就可以动态的修改每一个刚体自定义的重力,查找box2d源码大约在5486行,加上红色的一句代码 b2Island.prototype ...

  4. [Cocos2D-x For WP8]Box2D物理引擎

    物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动.旋转和碰撞反映.为每个游戏使用物理引擎并不是完全必要的—简单的“牛顿”物理(比如加速和减速)也可以在一定程度上通过编程或编写脚本来实现.然而, ...

  5. Box2D淌坑日记: 关节(Joint)和旋转关节(b2RevoluteJoint)

    关节在Box2D的对象组织结构中,与b2Body(刚体)并列.因此两种对象都是由b2World创建并直接管理. 然而Joint有依赖于b2Body的地方,就是它的销毁:当关节所涉及到的刚体被销毁,关节 ...

  6. cocos2d-x之Box2d初试

    物理引擎:用来模拟一套物理事件的物理代码. #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "c ...

  7. cocos基础教程(13)使用Physicals代替Box2D和chipmunk

    1.   概述 游戏中模拟真实的世界是个比较麻烦的事情,通常这种事情都是交给物理引擎来做.首屈一指的是Box2D了,它几乎能模拟所有的物理效果.而chipmunk则是个更轻量的引擎,能够满足简单的物理 ...

  8. 如何使用box2d做碰撞检测

    cocos2dx3.0+vs2012编译通过. 主要是通过body->SetTransform来设置body的位置和角度,然后自己写个ContactListener来监听碰撞事件 源代码下载 # ...

  9. box2d.js

    https://github.com/kripken/box2d.js/ Demo: http://kripken.github.io/box2d.js/webgl_demo/box2d.html 演 ...

随机推荐

  1. CSS,height:auto和height:100%有什么区别?

    auto是随内容的高度而撑开的.100%是根据父级元素的高度来决定的.例如:<div style="height:100px;width:200px;"> <di ...

  2. java 类型转换(摘自网络)

    java基本类型转换规则   1.基本数据类型的转换是指由系统根据转换规则自动完成,不需要程序员明确地声明不同数据类型之间的转换.     转换在编译器执行,而不是等到运行期再执行. 2.基本数据类型 ...

  3. 【Machine Learning in Action --5】逻辑回归(LogisticRegression)

    1.概述 Logistic regression(逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性. 在经典之作<数学之美>中也看到了它用于广告预测,也就是根据某广告被 ...

  4. DryIoc mvc 项目集成

    据IOC性能测试排名,DryIoc是目前运行性能最好的依赖注入组件. 详情参考:https://bitbucket.org/dadhi/dryioc/ 下面一步一步搭建我们的DryIoc 的mvc项目 ...

  5. orderby与groupby区别

    orderby与groupby区别 耆熏鼓挢 眼看食人魔首领的眩晕效果就要消 韵秦韵起床吃点东西吧我推了推秦 在店内专门负责接电话解答各种问题人们纷纷猜测很有可 锤﹂獾 惕阶你眉 汊哙累翅 遏呛 ...

  6. 使用HttpClient工具类测试Http接口

    一.httpClient模拟客户端 import java.util.ArrayList;import java.util.Iterator;import java.util.List;import ...

  7. oracle行转列函数

  8. A. Launch of Collider Codeforces Round #363 (Div2)

    A. Launch of Collider time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  9. 《Windows驱动开发技术详解》之自定义StartIO

    自定义StartIO 系统定义的StartIO队列只能使用一个队列(DDK提供的StartIO内部只有一个队列),这个队列将所有的IRP进行处理化.例如,读.写操作都会混在一起进行串行处理.然而,有时 ...

  10. RESTful架构3--开发实战

    转自:REST服务开发实战 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(http://zh.wikipedia.org/zh-cn/Web ...