关节在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. [bzoj2118]墨墨的等式【dijk+堆】

    10/30的update:如果是冲着dijk的板子来的,建议看多校联考contest中第二场day2的T2,那边的写法比较优秀... --------------------------------- ...

  2. Codeforces Round #349

    终于又回到熟悉的Round了 数学 A - Pouring Rain 设个未知数,解方程,还好没有hack点 #include <bits/stdc++.h> typedef long l ...

  3. MFC 打开链接的方法

    第一种: system("start explorer http://http://www.baidu.com"); 第二种: ShellExecute(NULL, NULL, _ ...

  4. BZOJ 2038 小z的袜子 & 莫队算法(不就是个暴力么..)

    题意: 给一段序列,询问一个区间,求出区间中.....woc! 贴原题! 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过 ...

  5. 最短路径dijkstra算法

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. Leetcode Add Binary

    Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...

  7. 【BZOJ】2659: [Beijing wc2012]算不出的算式

    题意 给两个奇质数\(p, q(p, q < 2^{31})\),求\(\sum_{k=1}^{\frac{p-1}{2}} \left \lfloor \frac{kq}{p} \right ...

  8. 【Oracle】如何导库

    正常倒库: 步骤一:在需要导入的库里建立一个新的数据库用户 create user sms533 identified by sms533; grant dba,create session to s ...

  9. docker warning ipv4 forwarding is disabled. networking will not work

    # vi /etc/sysctl.conf 添加如下代码:     net.ipv4.ip_forward=1 重启network服务 # systemctl restart network   查看 ...

  10. window下 配置gitlab ssh非端口22端口

    git config --global user.name "jack" git config --global user.email "jackluo@xxx.com& ...