关节在Box2D的对象组织结构中,与b2Body(刚体)并列。因此两种对象都是由b2World创建并直接管理。

然而Joint有依赖于b2Body的地方,就是它的销毁:当关节所涉及到的刚体被销毁,关节也会被销毁。此时再访问关节指针,将得到一个错误,因此,在销毁body的时候应该遍历其涉及到的Joint并销毁之。

除此之外,可算是并列于b2Body的b2World另一大组成成分。我们就得到了这么一个物理世界:有一堆刚体,也有一堆关节。这一堆刚体根据物理定律运行,这一堆关节限制或驱动某些刚体的运动。

旋转关节(b2RevoluteJoint)的注意点:

1 旋转关节的创建,需要两个刚体(废话),如果需求是一个刚体绕着一个点作有最大最小角度约束的运动,也可以选择用旋转关节,另一个物体选择一个没fixture的刚体,并设为b2_kinematicBody

2 旋转关节创建的时候需要把两个物体放到各自应该在的位置,然后给一个世界坐标作为轴。则工厂方法会按照世界坐标计算出两个物体各自的轴点,并使之符合当前的位置关系。

3 关节的角度控制。关节在创建的时候,会把当二者的相对角度记录下来成为0角度。body2逆时针旋转为正角度,反时针为逆角度。

4 关节的马达。关节马达有两个设置:速度和最大扭矩。速度表示马达的目标速度,未必能够达到,取决于扭矩,如果最大扭矩无法满足这个速度,就以最大扭矩来运算得到当前速度。而最大扭矩则是马达能够施加的最大扭矩。这个扭矩未必需要达到,取决于当前物体所受的力阻碍马达目标速度的程度。因此,速度和最大扭矩,都不是一设就立刻达到的东西,只是两个标准值。

然而,这里有一个坑,如果你的扭矩不够大,物体的重力可能导致设置的速度更本无法达到,我出现这个问题以后,一开始还以为速度没设上去,后来修改了扭矩才发现,是扭矩不够对抗重力的原因,因此,你希望设置速度,必须考虑设置一个足够的扭矩。

5 不管是马达还是关节限制,Joint的额外属性需要生效,几乎都需要设一个enableXXX,如果这个是false,设置的东西不会生效,没有效果

Box2D淌坑日记: 关节(Joint)和旋转关节(b2RevoluteJoint)的更多相关文章

  1. Box2D淌坑日记: 如何正确的设置角度

    对刚体角度设置的唯一函数是 SetTransform 然而,这个函数不会对传入的角度作任何处理,因此,如果你试图设置一个角度,并应用一个revoluteJoint时,可能会出现问题. 我在实践中碰到的 ...

  2. Cocos2dx淌坑日记:粒子系统PositionType的正确使用

    Cocos2dx中的粒子系统,有三种定位方式,对应于不同需求. 之前我有一个想做的效果,是类似彗星的扫尾.但是当父节点也就是CCLayer跟着物体移动的时候,发现尾巴并没有跟随CCLayer移动,而是 ...

  3. box2dweb之关节joint(连接器)

    1 概述 前篇基础文章看完后基本上就应该对box2dweb能上手了,下面来介绍一下box2dweb非常重要的一个概念,关节(joint)也有叫连接器的,总之是一个意思.下面是关节详细的类库说明: BO ...

  4. AI相关 TensorFlow -卷积神经网络 踩坑日记之一

    上次写完粗浅的BP算法 介绍 本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑.所以就先跳过算法介绍直接来应用场景,原谅我吧. TensorFlow 介绍 TF是g ...

  5. .Net Core 爬坑日记

    安装[DotNetCore.1.0.1-VS2015Tools.Preview2.0.3.exe]失败 查看log发现,发现猫腻,然后copy下链接,用迅雷手动下载[AspNetCoreLocalFe ...

  6. oracle入坑日记<六>自增列创建和清除(含序列和触发器的基础用法)

    0   前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. ...

  7. oracle入坑日记<四>表空间

    1   表空间是什么 1.1.数据表看做的货品,表空间就是存放货品的仓库.SQLserver 用户可以把表空间看做 SQLserver 中的数据库. 1.2.引用[日记二]的总结来解释表空间. 一个数 ...

  8. oracle入坑日记<三>用户详解(角色理解)

    1   用户是什么 1.1.权限管理是Oracle的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限.Oracle 的权限分为系统权限和数据对象权限,共一百多种.如果把Oracl ...

  9. oracle入坑日记<二>认识oracle(含sqlplus基础使用)

    1.SID(数据库实例) 1.1. oracle安装的时候有一项叫[全局数据库名]的填写项,这个就是oracle的SID也是数据库的唯一标识符: 1.2.一个oracle数据库有且只有一个SID(一般 ...

随机推荐

  1. 餐厅点餐系统app第二天

    队友: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...

  2. LightOJ1018 Brush (IV)(状压DP)

    题目大概说一个平面有n个灰尘,可以用一把刷子直直刷过去清理直线上的所有灰尘,问最少要刷几下才能清理完所有灰尘. 首先怎么刷其实是可以确定的,或者说直线有哪些是可以确定的,而最多就有C(n,2)条不一样 ...

  3. WPF DataGrid Control

    Introduction Since .NET 4.0, Microsoft is shipping a DataGrid control that provides all the basic fu ...

  4. storm UI

    Storm UI ——本文主要解释下storm ui上各项属性的含义. 通过http://UI_Server:8080可以打开Storm Web UI看看Storm集群的状态. 1. mainpage ...

  5. 快速搭建IE测试环境(Virtualbox+ievms)

    IE下的测试 作为一个有追求的程序员,应该尽可能的远离Windows系统.不论从专业开发者的角度,还是仅仅作为最终用户从使用体验上来说,Windows都可以算是垃圾中的战斗机: 没有shell . 响 ...

  6. HDU - The Suspects

    Description 严重急性呼吸系统综合症( SARS), 一种原因不明的非典型性肺炎,从2003年3月中旬开始被认为是全球威胁.为了减少传播给别人的机会, 最好的策略是隔离可能的患者. 在Not ...

  7. 期望dp BZOJ3450+BZOJ4318

    BZOJ3450 概率期望DP f[i]表示到i的期望得分,g[i]表示到i的期望长度. 分三种情况转移: ① s[i]=‘x’:f[i]=f[i-1],g[i]=0 ② s[i]=‘o’:f[i]= ...

  8. 向linux内核中添加外部中断驱动模块

    本文主要介绍外部中断驱动模块的编写,包括:1.linux模块的框架及混杂设备的注册.卸载.操作函数集.2.中断的申请及释放.3.等待队列的使用.4.工作队列的使用.5.定时器的使用.6.向linux内 ...

  9. Node.js 手册查询-2-MongoDB数据库方法

    MongoDb 标签(空格分隔): 数据库 MongoDb 安装 当前版本 2.X 解压至任意目录,最好不要是c盘. 在根目录下建立一个文件夹用来存储工程 我的例子: 安装至: d:\mongodb ...

  10. MongoDB数据库的简介及安装

    一.MongoDB数据库简介 简介 MongoDB是一个高性能,开源,无模式的,基于分布式文件存储的文档型数据库,由C++语言编写,其名称来源取自“humongous”,是一种开源的文档数据库──No ...