Chipmunk.js 教程2 (关节 马达)

这一节里面 主要讲述 chipmunk的关节 (joint).

  • PivotJoint 轴枢关节,相当于你在画面上按下一个图钉,2个刚体被图钉顶在上面, 只可以围绕图钉进行转动.
  • PinJoint 固定关节,相当于你用一个铁棍子连刚体A B的,棍子长度不会变化,也没有质量.
  • SlideJoint 滑动关节,根PinJoint 类似,只不过他允许”棍子”长度在一个范围内变化.
  • DampedSpring 阻尼弹簧关节,简单来说相当于你用一根弹簧链接A B两个刚体.
  • GrooveJoint 凹槽关节,基本可以理解为是一个在刚体A上挖一段凹槽, B的某一点插入这个凹槽.使得其被限制,只能在槽内来回活动.

关于轴枢关节(PivotJoint )下面还有几种子分类. 可能不是很常用 会用在某有些场景.

  1. GearJoint 齿轮关节,可以使A B同时转动.

  2. DampedRotarySpring 阻尼齿轮关节, 同 GearJoint 但是附加阻尼控制,简单来讲 你可以认为他是在水里转动的齿轮,速度越快 阻力越大.

  3. RotaryLimitJoint 受限制的齿轮关节, 可以限定其在超过一个角度范围时才开始跟随转动.

  4. RatchetJoint 单一方向齿轮关节, 只在 单一方向转动会被传导,否则无效.

这些关节中 最重要的应该就是 PivotJoint

那就让我们从他开始讲起.


PivotJoint 使用方法:

下面的代码近似的 意思是 在世界的绝对坐标 100 80这个地方按下一个图钉将 rock1 这个 刚体固定住.只可以围绕这个图钉旋转.

cp.PivotJoint(刚体,space.staticBody,绝对坐标)

var sp= new cp.PivotJoint(rock1,space.staticBody,cp.v(100,80));//在 100 80 的位置按下一个图钉
space.addConstraint(sp);//把这个图钉添加到当前 要模拟的世界里.

还有另一种使用方法

cp.PivotJoint(刚体1,刚体2,相对坐标1,相对坐标2)

这个主要用处在于 鼠标拖动, 你可以看一下官方例子上那个 鼠标拖动物体的效果,其实原理就是 在鼠标点击的地方创建一个 body 然后用 pivotJoint 链接它和你希望拖动的刚体.

var sp= new cp.PivotJoint(rock1,rock2,cp.v(0,0),cp.v(10,10));//意思是 拉拢 rock1 和 rock2 尽可能使其在 rock1的0 0位置 与rock2的 10 10位置重合
space.addConstraint(sp);

PinJoint 使用方法:

PinJoint 一旦建立就不能改变长度.

cp.PivotJoint(刚体1,刚体2,相对坐标1,相对坐标2)

var sp1= new cp.PinJoint(rock1,rock,v(0,0),v(0,0)); //连接 rock 与 rock1 两刚体的中心点. v(0,0)
space.addConstraint(sp1);

据说三角形是宇宙中最稳定的结构 ,那让我们来看一看.


SlideJoint 使用方法:

其实他就是一根 能长能短的棍子.

new cp.SlideJoint(body1, body2, v(15,0), v(15,0), min, max) 用”绳子”(其实我觉得模拟的也不太像) 连接2刚体 绳长在min – max 之间

var sp1= new cp.SlideJoint(body1, body2, v(15,0), v(15,0), 20, 40); //在 两个刚体 15,0 的位置分别连接一个"绳子" 长度伸缩在 20-40之间
space.addConstraint(sp1);

DampedSpring 阻尼弹簧关节使用方法:

new cp.DampedSpring(rock1, rock2, v(0,0), v(0,0), 静止长度 ,硬度, 阻力-0,1) 很简单 用弹簧连接 rock1,与rock2

var sp1= new cp.DampedSpring(rock1, body,  v(0,0), v(0,0), 50,100, 0.3)
space.addConstraint(sp1);

GrooveJoint 凹槽关节使用方法:

new cp.GrooveJoint(body1, body2, v(-90, -30), v(-90, -60), v(0,0)) 在 body1 身上从 -90 -30 到 -90 -60开一道沟槽,把body2的 0 0点 放入沟槽里.

var sp1= new cp.GrooveJoint(body1, body2, v( 90, -30), v( 90, -60), v(0,0))
space.addConstraint(sp1);

关于 引擎(engine)的概念

引擎其实就是为某个 body 提供一个 永久的无穷大的扭矩..

new cp.SimpleMotor(circleRock,space.staticBody,-3)

var sp1= new cp.SimpleMotor(circleRock,space.staticBody,-3); 
space.addConstraint(sp1);
留言:

称呼:*

邮件:

网站:

内容: