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. 亲身体验:digitalocean vps能做的10件事

    我写过一篇亲身体验:digitalocean和linode评测哪个好,帮助不少网友选购价格便宜性能优异的免备案vps,相信大家对两家产品有所了解.vps的性能和用途远远超过传统的虚拟主机,你拥有独立I ...

  2. velocity 高亮显示

    velocity模板在eclipse中高亮显示的链接 http://download.eclipse.org/eclipse/updates/4.4http://veloeclipse.googlec ...

  3. Android Lights

    Android Lights 很多Android手机上都配有LED灯,手机在充电.新来短信等时候都会有相应的指示灯提示. Android系统之中,一共定义了8个逻辑灯,包含:背光,键盘灯,按键灯,充电 ...

  4. log4j.properties文件的配置

    Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松 ...

  5. keepalived问题

    Sep 30 11:41:34 XSXSH-LB2 Keepalived[2735]: Starting Keepalived v1.2.12 (04/08,2014) Sep 30 11:41:34 ...

  6. HyperSnap(屏幕抓图工具) 8.11.03 官方简体中文特别版

    软件名称:屏幕抓图工具HyperSnap 软件分类:图像捕捉运行环境:WinXP/Win2003/Vista/Win7/Win8/WinALL软件语言:简体中文授权方式:免费软件软件大小:12462K ...

  7. Bmob Androidstudio配置

    AndroidStudio配置 鉴于目前Google官方推荐使用 Android Studio 进行Android项目开发,自 V3.4.2 开始,Bmob Android SDK 可以使用Gradl ...

  8. JavaScript获取浏览器信息的方法

    Window有navigator对象让我们得知浏览器的全部信息.我们可以利用一系列的API函数得知浏览器的信息. JavaScript代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 1 ...

  9. wpf 数据绑定的4种形式

    1.source 2.element 3.relativesource 4.datacontent

  10. U盘做svn版本控制

    svn提供的访问方式有: file:///本地路径/to/svnrepo/ //访问本地磁盘 http://host/to/svnrepo/ //通过配置subversion的apache服务器的we ...