`
hao3100590
  • 浏览: 132486 次
  • 性别: 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_02_碰撞主题涵盖了Box2D在2D碰撞检测和响应的核心技术,以及在Android平台上使用C++实现这些功能的方法。通过熟练掌握这些知识,开发者能够构建出具有真实感的物理效果的游戏或应用。

    box2d碰撞检测教程

    总的来说,"cocos2d box2d碰撞检测教程"将引导你深入理解如何在Cocos2d项目中设置和利用Box2D的碰撞检测系统。通过学习这个教程,你将能够创建更真实、更互动的游戏环境,为玩家带来更好的体验。教程可能包括创建...

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

    本文将详细介绍如何在Cocos2d-x框架下利用Box2D进行碰撞检测,帮助开发者构建出更加生动有趣的游戏场景。 Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,支持多种编程语言,如C++、Lua和JS。Box2D则是由 Erin ...

    Box2D中文手册

    2. **碰撞检测**:Box2D实现了精确的碰撞检测算法,能够准确识别物体之间的接触,并据此计算出合适的反作用力,确保游戏中的物理行为符合现实世界规律。 3. **关节与约束**:Box2D提供了多种类型的关节(joints),...

    Box2D详解2 碰撞筛选1

    在标题提到的"Box2D详解2 碰撞筛选1"中,主要讲解了如何利用Box2D的碰撞过滤机制来实现特定的游戏逻辑。 首先,碰撞过滤依赖于三个关键属性:类别标志位(categoryBits)、遮罩标志位(maskBits)和分组索引...

    box2d_2.添加鼠标关节MouseJoint和box2d基础概念

    Box2D是一个流行的开源物理引擎,用于在2D空间中模拟真实世界物理行为。它广泛应用于游戏开发,让开发者能够创建具有逼真物理效果的游戏场景。在这个“box2d_2.添加鼠标关节MouseJoint和box2d基础概念”的主题中,...

    box2d_py-2.3.5-cp39-cp39-win_amd64.whl.zip

    Box2D由Ernesto Pena创建,最初是用C++编写的,它允许开发者在他们的2D应用中实现复杂的物理效果,如碰撞检测、重力、摩擦力等。Box2D通常用于游戏开发,但也广泛应用于教育、科研和原型设计等领域。它的核心功能...

    box2d小球碰撞--js代码

    在这个“box2d小球碰撞--js代码”的项目中,开发者使用jQuery与Box2D库结合,创建了一个小球碰撞的互动场景。 首先,我们要理解jQuery库。jQuery是一个高效、简洁的JavaScript库,简化了HTML文档遍历、事件处理、...

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

    - **碰撞检测**:Box2D自动处理刚体间的碰撞,计算接触点和冲量交换。 - **约束解决**:关节和其他约束在每一步都会被检查和调整,确保刚体行为符合预设规则。 - **接触监听器**:你可以注册回调函数,监听特定的...

    box2d中文教程.pdf

    Box2D的核心功能在于能够模拟刚体的物理行为,包括碰撞检测、响应及物理运动等。 #### 二、Box2D的基本概念 - **刚体 (Rigidbody)**: 刚体是指在其内部任何两个点间的距离始终保持不变的物体,这种特性使得物体能够...

    box2d_py-2.3.5-cp37-cp37m-win_amd64.whl.zip

    Box2D库本身由Erin Catto开发,它广泛应用于各种2D游戏和教育软件中,因为它能够高效地处理碰撞检测、刚体动力学和关节连接等复杂物理问题。 Box2D_Py的版本为2.3.5,这是一个针对Python 3.7(cp37)编译的特定版本...

    box2D中文手册

    1. **碰撞检测**:Box2D提供了精确的碰撞检测机制,确保物理对象之间的碰撞得到正确处理。 2. **动态模拟**:通过模拟重力、摩擦力和弹性,Box2D可以实现逼真的物体运动。 3. **接触处理**:当两个形状发生碰撞时...

    Box2D库(头文件+dll)

    Box2D库还包括了强大的碰撞检测机制,它可以自动检测和处理刚体之间的碰撞,触发相应的碰撞事件。此外,Box2D还支持传感器,这些传感器虽然不会参与物理碰撞,但可以用来检测与其他物体的接近情况,非常适合实现...

    Box2d中文说明

    为了创建世界,首先需要定义一个包围盒,Box2D利用该包围盒优化碰撞检测效率。包围盒的大小并非决定性因素,但合理设置有助于提升性能。包围盒宜大不宜小,确保所有物体均在其内,以避免潜在的性能损失。 ```cpp b2...

    Box2D 最新引擎

    3. **碰撞检测**:Box2D内置了高效的碰撞检测算法,可以处理各种形状之间的碰撞,包括刚体与刚体、刚体与静态形状以及形状与形状之间的碰撞。当碰撞发生时,引擎会提供接触点信息,供开发者处理碰撞响应。 4. **...

    Box2D v2.3.0 用户手册中文版

    Box2D 是一个开源的物理引擎,主要用于模拟二维碰撞和刚体动力学。该引擎广泛应用于游戏开发、机器人模拟、计算机动画等领域。Box2D v2.3.0 是该引擎的最新版本,提供了许多新的功能和改进。 关于 Box2D Box2D 是...

    box2d中文教程

    接触约束(Contact Constraint):接触约束是由Box2D自动创建的,用于处理不同形状之间的接触和碰撞。 关节(Joint):关节用于将两个或多个物体连接在一起。Box2D支持多种关节类型,如旋转关节、棱柱关节和距离...

    box2d 中文手册

    - 定义世界包围盒:Box2D利用包围盒加速碰撞检测,包围盒的大小需适当,过大或过小均会影响性能。包围盒应始终覆盖所有物体的活动区域,防止物体到达边界而被冻结。 - 设置重力矢量:重力方向可根据游戏需求设定,...

    box2d开发说明(cocos2d for iphone)

    - **碰撞检测与响应:**Box2D提供了高效的碰撞检测算法,能够精确地计算两个物体之间的碰撞,并模拟出相应的物理反应。 - **刚体动力学:**通过模拟物体的质量、速度、加速度等属性,Box2D能够使游戏中的物体表现出...

    愤怒的小鸟物理引擎Box2D(c++)带文档

    Box2D是一个开源的2D物理引擎,由Ernesto Pena开发,广泛应用于游戏开发,尤其是像"愤怒的小鸟"这样的休闲游戏中。这个引擎以其高效、精确的模拟物理效果而闻名,允许开发者轻松地创建出逼真的物体碰撞、重力和其他...

Global site tag (gtag.js) - Google Analytics