1 概述

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

BOX2D.Dynamics.Joints>>>动态关节包;
b2DistanceJoint 距离连接
b2DistanceJointDef 距离连接定义.
b2GearJoint 齿轮链接.
b2GearJointDef 齿轮连接定义.
b2Joint 连接基类.
b2JointDef 连接定义基类.
b2JointEdge 用于组合刚体或连接到一起.刚体相当于节点,而连接相当于边
b2MouseJoint 鼠标连接.
b2MouseJointDef 鼠标连接定义.
b2PrismaticJoint 移动连接.
b2PrismaticJointDef 移动连接定义.
b2PulleyJoint 滑轮连接.
b2PulleyJointDef 滑轮连接定义.
b2RevoluteJoint 旋转连接.
b2RevoluteJointDef 旋转连接定义.

当然,创建的时候用连接器定义类,创建出来的时连接器类。下面我们来一一来看。

2.1 距离连接器b2DistanceJoint

  距离连接器就是以固定的距离来连接两个body,这其中就有4个固有概念,两个物体,两个物体上的连接点。

  首先,我们先定义两个body:

//定义两个body
var bodydef=new b2BodyDef();
bodydef.type = b2Body.b2_dynamicBody;
var fixDef=new b2FixtureDef();
fixDef.sharp=new b2CircleShape(0.2)
fixDef.density = 5.0;
fixDef.friction = 0.4;
fixDef.restitution =0.3; var body1 = world.CreateBody(bodyDef);
body1.SetPosition(new b2Vec2(2,2));
body1.CreateFixture(fixDef); var body2 = world.CreateBody(bodyDef);
body2.SetPosition(new b2Vec2(4,3));
body2.CreateFixture(fixDef);

然后我们用距离连接器将这两个物体连接起来:

var disjoint=new b2DistanceJointDef();
//设置要连接的两个物体
disjoint.bodyA=body1;
disjoint.bodyB=body2;
//设置连接在两个物体上相对于中心点的位置(如果不设置,默认为中心点)
disjoint.localAnchorA.Set(0.1,0.1);
disjoint.localAnchorB.Set(0,0);
//设置距离,如果不设置则为两物体之间的实际距离,如果设置的距离与实际距离不符,则拉伸至设置的距离
disjoint.length=1;
world.CreateJoint(disjoint);

下面来看效果

 

  距离连接器还有几个有趣的参数,collideConnected   是否允许关联的两个物体碰撞,默认是不计算的。另外两个参数与关节的弹性相关,频率(frequency)和阻尼率(damping ratio),其中频率指谐振时候的快慢,一般该值要小于时间歩频率(世界刷新频率)的一半,阻尼率是一个0~1之间的数值,值为1时将没有振动。下面我们来加弹性参数:

disjoint.frequencyHz = 4;
disjoint.dampingRatio = 0.2;

看效果

 

box2dweb之关节joint(连接器)的更多相关文章

  1. Box2D淌坑日记: 关节(Joint)和旋转关节(b2RevoluteJoint)

    关节在Box2D的对象组织结构中,与b2Body(刚体)并列.因此两种对象都是由b2World创建并直接管理. 然而Joint有依赖于b2Body的地方,就是它的销毁:当关节所涉及到的刚体被销毁,关节 ...

  2. libgdx学习记录21——Box2d物理引擎之碰撞Contact、冲量Impulse、关节Joint

    Box2d中,物体可以接受力(Force).冲量(Impulse)和扭矩(Torque).这些物理元素都能改变物体的运动形式,并且默认都会唤醒物体,当然只是针对动态物体. 力是一个持久的效果,通过Bo ...

  3. 代码本色 用编程模拟自然系统 (Daniel Shiffman 著)

    https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.7/p5.js http://www.box2d.org http://www.jbox2d.org ...

  4. cocos2dx-3.x物理引擎Box2D介绍

    理引擎 Cocos2d-x引擎内置了两种物理引擎,它们分别是Box2D和Chipmunk,都是非常优秀的2D物理引擎,而且x引擎将它们都内置在SDK中.Box2D使用较为广泛,在这里选择Box2D来进 ...

  5. 游戏引擎架构 (Jason Gregory 著)

    第一部分 基础 第1章 导论 (已看) 第2章 专业工具 (已看) 第3章 游戏软件工程基础 (已看) 第4章 游戏所需的三维数学 (已看) 第二部分 低阶引擎系统 第5章 游戏支持系统 (已看) 第 ...

  6. [原创]cocos2d-x研习录-第三阶 特性之物理引擎

    游戏物理引擎是指在游戏中涉及物理现象的逻辑处理,它用于模拟现实世界的各种物理规律(如赛车碰撞.子弹飞行.物体掉落等),让玩家能够在游戏中有真实的体验. Cocos2D-x中支持Box2D和Chipmu ...

  7. [原]Unity3D深入浅出 - 新版动画系统(Mecanim)

    Mecanim概述: Mecanim是Unity提供第一个丰富而复杂的动画系统,提供了: 针对人形角色的简易的工作流和动画创建能力 Retargeting(运动重定向)功能,即把动画从一个角色模型应用 ...

  8. Unity3d 实现顶点动画

    在今年GDC上发现一个非常有趣的演讲,叫做Animating With Math,遂实现之,是讲述顶点shader动画的,举了几个经典的例子,但是讲者并没有给代码,而是像虚幻引擎那样的节点,这样更加清 ...

  9. cocos2d-x中的Box2D物理引擎

    在Cocos2d-x中集成了2个物理引擎,一个是Chipmunk,一个是Box2D.前者是用C语言编写的,文档和例子相对较少:Box2D是用C++写的,并且有比较完善的文档和资料.所以在需要使用物理引 ...

随机推荐

  1. iOS 用宏定义写一个单例(Singleton)

    用如下方法定义单例 @interface singleton_interface(ClassName); @end 实现单例在 @implemention singleton_implemention ...

  2. 【转】在.Net中关于AOP的实现

    原文地址:http://www.uml.org.cn/net/201004213.asp 一.AOP实现初步 AOP将软件系统分为两个部分:核心关注点和横切关注点.核心关注点更多的是Domain Lo ...

  3. Mybatis resultMap空值映射问题解决

    Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age,数据库中的 ...

  4. PHP不能创建csv中文名文件

    使用iconv 将utf-8转换成gb2312即可$name = iconv("utf-8","gb2312",'分销商下载课件记录');

  5. endsWith和startsWith同样效果其他形式的写法(2016.1.12)

    //判断以什么开始startWith str = "abcdef"; //用其他的形式写的startsWith if(str.indexOf("abc")==0 ...

  6. 第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触

    http://blog.csdn.net/visioncat/article/details/1596576 GCC for Win32 开发环境介绍(5) 第四章 跨平台图像显示库——SDL 第一节 ...

  7. BLE协议栈及传统蓝牙协议栈对比图

    1. BLE协议栈的层次图如下: 主机控制接口层: 为主机和控制器之间提供标准通信接口 逻辑链路控制及自适应协议层: 为上层提供数据封装服务 安全管理层: 定义配对和密钥分配方式,为协议栈其他层与另一 ...

  8. Eclipse+Qt开发环境设置(Linux和Win)

    文章摘要: Windows,Linux平台下安装使用Eclipse + QT4.4.3开发环境 Windows,Linux新建project时的配置(不使用QT预置项目类型,而是手工配置) 使用Ecl ...

  9. Qt调用Server SQL中的存储过程

    Server SQL中的存储过程如下: CREATE procedure PINSERTPC @pcnum int, @pcname varchar(50), @pctype int, @ipaddr ...

  10. 如何将cmd中命令输出保存为TXT文本文件

    在使用Windows 中的cmd.exe工具时,有时候我们想要把我们的输入命令及结果保存起来, 但是用复制的方法过于麻烦:有时输出数据条数过大,会造成内容自动滚出屏幕,无法阅读,我们可将命令运行的结果 ...