`
hao3100590
  • 浏览: 128980 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多

 

应用博客:http://blog.sina.com.cn/s/blog_6a2061a20100n0or.html

 

碰撞筛选就是一个防止某些形状发生碰撞的系统。按照具体需求设置哪些物体跟那些物体发生碰撞,跟哪些物体不发生碰撞。
Box2D通过种群跟组索引支持碰撞筛选。
组索引比较简单,设置其shapeDef的groupIndex值即可,例如boxDef.filter.groupIndex = 1。
通过groupIndex值的正负来确定同一个组的所有形状总是发生碰撞(正)或永远不发生碰撞(负),需要特别注意的是两个不同的付索引是依然会发生碰撞的,例如一个圆的GroupIndex值为-1,一个矩形GroupIndex值为-2。因为不同组索引之间是按照种群跟掩码来筛选的,也就是讲,组索引是有着更高的优选权的。

Box2D支持16个种群,因此我们可以指定任何一个形状属于哪个种群,同时也可以指定这一形状和哪些其它的种群发生碰撞。这一过程就是通过设置其shapeDef的categoryBits值与maskBits值完成的。
categoryBits用于定义自己所属的碰撞种类,maskBits则是指定碰撞种类。
举个例子讲,如果body1的boxDef.filter.categoryBits = 0x0002,body2的boxDef.filter.categoryBits = 0x0004,则如果另外一个body想与他们两个都发生碰撞,则其boxDef.filter.maskBits = 0x0006;简单讲,一个body要与其它种群的body发生碰撞,则其maskBits值应该为其它种群的body的categoryBits之和。

但是同时也不是那么简单,如果三个body的categoryBits分别为0x0001,0x0002,0x0003,那另外一个body的 maskBits值如果是0x0003的话,那它是跟categoryBits值为0x0001和0x0002的两个body碰撞呢,还是单独只跟 categoryBits值0x0003的body发生碰撞呢,亦或是跟三个body都发生碰撞呢?

一个游戏中的种群一般有多少种呢?

现在我们就做一个测试,具体要求:四个刚体。
矩形:只跟自身,圆形,三角形发生碰撞。
圆形:只跟自身,矩形,五边形发生碰撞。
三角形:只跟自身,矩形发生碰撞。
五边形:只跟自身,圆形碰撞。


categoryBits值:矩形[0x0001],圆形[0x0002],三角形[0x0003],五边形[0x0004]。
maskBits值:矩形[1+2+3=6=0x0006]
            圆形[1+2+4=7=0x0007]
            三角形[1+3=4=0x0004]
            五边形[2+4=6=0x0006]
这个碰撞具体会怎样呢?矩形跟五边形竟然一样!6跟7少说也有两种组合方法,还是直接看Demo好了。
 

结果:
矩形:只跟圆形发生碰撞。6跟2有什么关系?
圆形:只跟自身,矩形,五边形发生碰撞。符合要求。赞一个!
三角形:只跟五边形发生碰撞。4跟4,是不是单一比组合优先?
五边形:只跟自身,圆形,三角形发生碰撞。6 = 2+3+4??我勒个去!

 

还是先看看正确的把!

 

一切一切的错误就是categoryBits值有些取值是违规的,categoryBits值是必须为2的倍数的。

即有如下的16个种群:

0x0000 = 0

0x0001 = 1

0x0002 = 2

0x0004 = 4

0x0008 = 8

 

0x0010 = 16

0x0020 = 32

0x0040 = 64

0x0080 = 128

 

0x0100 = 256

0x0200 = 512

0x0400 = 1024

0x0800 = 2048

 

0x1000 = 4096

0x2000 = 8192

0x4000 = 16384

0x8000 = 32768

这样子,6就只能跟2+4配对,8就只能跟8自己配对。

分享到:
评论

相关推荐

    Box2D_02_碰撞_box2D安卓快写代码_box2D_box2d碰撞_

    简单的box2D编程!快写c++代码软件

    box2d碰撞检测教程

    cocos2d box2d碰撞检测教程 感谢翻译的大侠上传到网上给大家学习

    cocos2d-x使用box2d来做碰撞检测

    cocos2d-x,box2d来做碰撞检测

    Box2D 中文手册

    Box2D 中文手册,非常详细的Box2D文档,入门绝佳

    Box2d简介Box2d简介

    Box2d简介 Box2d简介 Box2d简介 Box2d简介

    Box2D详解2 碰撞筛选1

    )在一些小游戏中,如果涉及到这些设置,一方面我们可以自己进行碰撞过滤,另一方面,如果我们使用到了Box2D,那么,我们就可以使用Box2D自带的碰撞过滤(Col

    BOX2D 物理游戏编程初学者指南 陈文登(高清,带目录)

    高清带目录《Box2D物理游戏编程初学者指南》系统地梳理学习Box2D物理游戏编程的各个知识点,并通过图解、问答、举例等形式深入浅出地讲解初学者觉得晦涩难懂的概念、术语。  《Box2D物理游戏编程初学者指南》最后,...

    2D游戏碰撞引擎 Box2D V2.0

    Box2D is a 2D physics engine for games. For help with Box2D, please visit http://www.box2d.org. There is a forum there where you may post your questions. The project files with this distribution ...

    box2d中文教程

    Box2D是一个用于游戏的2D刚体仿真库,它可以使物体的运动更加真实,让游戏场景看起来更具交互性。2D物理引擎能增强游戏世界中物体如多边形(砖块,三角形,多边形)的动作的真实感从而提高游戏质量。该引擎通过用户...

    box2d 物理碰撞 重力 摩擦实现

    box2d 物理碰撞 重力 摩擦实现 c++实现

    Box2D_v2.1.2

    Box2D_v2.1.2 Box2D is a 2D physics engine for games. For help with Box2D, please visit http://www.box2d.org. There is a forum there where you may post your questions.

    Box2D+v2.1.0用户手册中文翻译

    Box2D+v2.1.0用户手册中文翻译 as3.0的

    box2d 2.3.1

    box2d 2.3.1 下载

    Box2D API.chm

    Box2D API.chm Box2D 二维物理引擎

    box2d 中文手册

    box2d 中文手册 box2d 中文手册

    box2d-as3版 中文教程

    Box2D 是一个用于游戏的 2D 刚体仿真库。程序员可以在他们的游戏里使用它,它可以使物体的运动 更加可信,让世界看起来更具交互性。从游戏的视角来看,物理引擎就是一个程序性动画(procedural animation)的系统,而...

    Box2D中文手册

    Box2D中文手册.Box2D是一个用于游戏的2D刚体仿真库。程序员可以使用它, 让游戏中的物体运动起来更真实, 让游戏世界更具交互性。以游戏的角度来看,物理引擎就是一个程序性动画的系统。

Global site tag (gtag.js) - Google Analytics