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. sql优化原则

    尽量使用性能高的比如left join等,尽量减少数据查询的column,尽量不要查询冗余数据,like的话“%%”是没有 办法使用索引的,但是“%”是可以使用索引的 having以前一直不知道到底真 ...

  2. python 进制 转换

    测试用的python源码 ''''' Created on 2014年8月21日 @author: lenovo ''' import binascii import struct def examp ...

  3. Foundations of Computer Science

    1, Iteration, Induction and Recursion 2, the running time of program 3, combinatorics and probabilit ...

  4. Python中exec的使用

    >>>globals = {'x':7, .....: 'y':10, .....: 'names':['aa','bb','cc'] .....: } >>>lo ...

  5. spring 框架的 @Autowired 和 @Resource 两种注解的区别

    最开始做项目时,依赖注入用到的注解都是 J2EE 的 @Resource,那时还根本不了解 spring 有 @Autowired.心塞. 前两天想到估计有很多刚开始学习 java 的童鞋可能对这两个 ...

  6. Windows如何压缩tar.gz格式

    Windows如何压缩tar.gz格式 tar.gz 是linux和unix下面比较常用的格式,几个命令就可以把文件压缩打包成tar.gz格式 然而这种格式在windows并不多见,WinRAR.Wi ...

  7. leetcode441(巧妙利用取整和解方程)

    You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...

  8. JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)

    什么是序列化 java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输.或者持久化存储到数据库或文件系统中:然后在需要的时候 ...

  9. GlusterFS常用命令小结

    # /etc/init.d/glusterd start # /etc/init.d/glusterd stop # /etc/init.d/glusterd status 2.       开机自动 ...

  10. CCF考试真题题解

    CCF考试认证:题解参考博客http://blog.csdn.net/u014578266/article/details/45221841 问题描述 试题编号: - 试题名称: 图像旋转 时间限制: ...