关节在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. AutoMapper简明教程(学习笔记)

    ].FirstName + nameDto12[].LastName);Console.WriteLine();//Console.ReadKey();//emitMapper error//List ...

  2. 操作TAB文件和TStringGrid赋值;

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  3. 4、delphi record数组复制

    SetLength(OldDeptInfo,0); //释放旧数组 OldDeptInfo:=nil; 这样也可以: //SetLength(OldDeptInfo,Length(NewDeptInf ...

  4. 如何用distinct消除重复记录的同时又能选取多个字段值?

    http://www.cnblogs.com/warioland/archive/2012/05/30/2526128.html

  5. Temp文件夹缺少network service权限,webservice能访问,但是不能调用

    给C:\WINDOWS\temp文件夹添加NETWORK SERVICE权限即可

  6. Linux crontab 定时任务命令详解

    一.简介 crontab 命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行.通常,crontab 储存的指令被守护进程激活, cr ...

  7. Windows下安装Docker

    放在三年前,你不认识Docker情有可原,但如果现在你还这么说,不好意思,只能说明你OUT了,行动起来吧骚年,很可能你们公司或者你即将要去的公司,或者你想去的公司很可能就会引入Docker,或者已经引 ...

  8. Extjs用到的一些有用的网页的集锦

    1. extJS常用的4中Ajax异步提交 http://www.2cto.com/kf/201403/284083.html http://blog.csdn.net/goodshot/articl ...

  9. Mac OS Storm+Kafka+Zookeeper配置

    先补充一个前两天mac配置的文档. 首先确定由jdk scala环境 JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/Cu ...

  10. 经典收藏 50个jQuery Mobile开发技巧集萃

    http://www.cnblogs.com/chu888chu888/archive/2011/11/10/2244181.html 1.Backbone移动实例 这是在Safari中运行的一款Ba ...