box2dweb之关节joint(连接器)

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

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:

 

 1 //定义两个body
 2 var bodydef=new b2BodyDef();
 3       bodydef.type = b2Body.b2_dynamicBody;
 4 var fixDef=new b2FixtureDef(); 
 5       fixDef.sharp=new b2CircleShape(0.2)
 6       fixDef.density = 5.0;
 7       fixDef.friction = 0.4;
 8       fixDef.restitution =0.3;
 9 
10 var body1 = world.CreateBody(bodyDef);
11       body1.SetPosition(new b2Vec2(2,2));
12       body1.CreateFixture(fixDef);
13                    
14 var body2 = world.CreateBody(bodyDef);
15       body2.SetPosition(new b2Vec2(4,3));
16       body2.CreateFixture(fixDef);

 

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

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

 

下面来看效果

 

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

 

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

 

看效果

 

 

      

目录
相关文章
|
图形学
Unity组件:Fixed Joint 固定关节
Fixed Joints restricts an object's movement to be dependent upon another object. This is somewhat similar to Parentingbut is implemented through physics rather than Transform hierarchy.
1927 0
|
8月前
|
JavaScript 前端开发 算法
Box2D(现在通常称为Box2D.js或者其WebAssembly版本,Emscripten Box2D)是一个流行的2D物理引擎,用于模拟刚体动力学、碰撞检测与响应以及关节约束等物理现象
【6月更文挑战第16天】Box2D.js,基于C++的2D物理引擎,经Emscripten编译为WebAssembly,用于JavaScript游戏中的真实物理模拟,包含碰撞检测和关节约束。它提供高效的碰撞检测,易于扩展和定制物理属性。使用步骤涉及初始化世界、创建刚体、添加碰撞形状、模拟物理及处理碰撞事件。物理引擎虽提升逼真度,但也增加复杂性和性能需求。其他选项如p2.js、matter.js和ammo.js也可供选择。
236 8
|
Web App开发 算法 JavaScript
3D拓扑自动布局之Web Workers篇
2D拓扑的应用在电信网管和电力SCADA领域早已习以为常了,随着OpenGL特别是WebGL技术的普及,3D方式的数据可视化也慢慢从佛殿神堂步入了寻常百姓家,似乎和最近高档会所被整改为普通茶馆是一样的节奏。
905 0
|
前端开发
box2dweb基础
简介   大名鼎鼎的物理引擎box2d基本上大家都听说过,网上有两个javascript版本的box2d库,一个时box2djs,已经停止维护,一个是box2dweb。下面就来介绍一下box2dweb的基本信息。
1140 0
|
缓存 定位技术
ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明
原文:ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明 ArcGIS Portal 10.4 本地坐标系的web 3d地形展示制作说明 By 李远祥 ArcGIS Portal在10.4版本开始支持本地坐标系的三维展示,可以说是ArcGIS产品Web3D的又一进步。
1217 0
|
Web App开发
基于HT for Web 3D呈现Box2DJS物理引擎
上篇我们基于HT for Web呈现了A* Search Algorithm的3D寻路效果,这篇我们将采用HT for Web 3D来呈现Box2DJS物理引擎的碰撞效果,同上篇其实Box2DJS只是二维的平面碰撞物理引擎,但同样通过3D的呈现能让人更直观的体验到碰撞效果,先上张最终例子效果图: Box2D最早是Erin Catto在GDC大会上的一个展示例子,后来不断完善成C++的开源物理引擎库,这些年了衍生出Java、ActionScript以及JS等版本,被广泛应用在游戏领域。
895 0
|
测试技术
Unreal MorphTarget Connect Bone & MetaData Curve功能学习
Unreal MorphTarget Connect Bone & MetaData Curve功能学习
115 0
|
9月前
|
SQL 存储 Oracle
C# Web控件与数据感应之 Control 类
C# Web控件与数据感应之 Control 类

热门文章

最新文章