chipmunk約束
約束是用來描述兩個剛體如何相互作用的腾夯。簡單來說就是關節(jié)校套。
Pin Joints
將2個剛體用固定的杠桿連接价脾,兩個剛體相對位置固定,可繞各自連接點自由旋轉笛匙。
var pinJoint = new cp.PinJoint(body1, body2, anchor1, anchor1);
space.addConstraint(pinJoint);
anchor1:杠桿連接位置,相對于body1重心的相對坐標
anchor2:杠桿連接位置,相對于body2重心的相對坐標
Slide Joints
將2個剛體用可伸縮的杠桿連接侨把,兩個剛體相對位置固定,可繞各自連接點自由旋轉膳算。
var slideJoint = new cp.SlideJoint(body1, body2, anchor1, anchor1, min, max);
space.addConstraint(slideJoint);
min:杠桿最小伸縮長度
max:杠桿最大伸縮長度
Pivot Joints
將2個剛體用長度為0的杠桿連接座硕,兩個剛體相對位置固定弛作,可繞各自連接點自由旋轉涕蜂。
可用于鼠標拖動剛體
// 創(chuàng)建方式1
var pivotJoint = new cp.PivotJoint(body1, body2, anchor);
space.addConstraint(pivotJoint);
// 創(chuàng)建方式2
var pivotJoint = new cp.PivotJoint(body1, body2, anchor1,anchor2);
space.addConstraint(pivotJoint);
anchor: 杠桿位置(世界坐標)
anchor1: 杠桿連接位置,相對于body1重心的相對坐標
anchor2: 杠桿連接位置,相對于body2重心的相對坐標
Groove Joints
在剛體1上焊接一根固定杠桿映琳,剛體2與杠桿連接机隙,可在杠桿上移動旋轉,可繞連接點自由旋轉
var grooveJoint = new cp.GrooveJoint(body1, body2, groove_a, groove_a, anchor2);
space.addConstraint(grooveJoint);
groove_a:杠桿起點相對于body1重心的相對坐標
groove_b:杠桿終點相對于body1重心的相對坐標
anchor2: 杠桿連接位置,相對于body2重心的相對坐標
Damped Springs
將2個剛體用彈簧連接萨西,可繞各自連接點自由旋轉
var dampedSpring = new cp.DampedSpring(body1, body2, anchor1, anchor2, restLength, stiffness, damping);
space.addConstraint(dampedSpring);
restLength:彈簧不受力時的長度
stiffness: 彈簧系數(shù)(剛度)
damping: 彈簧阻尼的柔軟度(一般0-1)
上面參數(shù)的效果我也不太懂有鹿,具體的自己試
Damped Rotary Springs
類似Damped Springs,只是它的約束是弧度谎脯,而不是距離
var dampedRotarySpring = new cp.DampedRotarySpring(body1, body2, restAngle, stiffness, damping);
space.addConstraint(dampedRotarySpring);
restLength:彈簧不受力時的角度差
上面參數(shù)的效果我也不太懂葱跋,具體的自己試
Rotary Limit Joint
約束剛體1與剛體2的角度差在一定范圍內(nèi)
var rotaryLimitJoint = new cp.RotaryLimitJoint(body1, body2, minAngle, maxAngle);
space.addConstraint(rotaryLimitJoint);
minAngle:body1與body2的最小弧度差
maxAngle:body1與body2的最大弧度差
Ratchet Joint
棘輪關節(jié),具體效果不好描述源梭。
剛體1順時針轉動不影響剛體2娱俺,逆時針轉動則剛體2同時逆時針轉動同等角度
剛體2逆時針轉動不影響剛體2,順時針轉動則剛體1同時順時針轉動同等角度
var ratchetJoint = new cp.RatchetJoint(body1, body2, phase, ratchet);
space.addConstraint(ratchetJoint);
ratchet:“clicks”間的距離
phase: 決定棘輪角度的時候的初始位移
這個參數(shù)的效果我也不太懂废麻,具體的自己試
Gear Joint
齒輪關節(jié)荠卷,保持著2個剛體恒定的角速度比
var gearJoint = new cp.GearJoint(body1, body2, phase, ratio);
space.addConstraint(gearJoint);
phase:初始弧度差
ratio:body1與body2的角速度比(可負,即反向)
Simple Motor
簡單馬達烛愧,保持著2個剛體恒定的角速度比
var simpleMotor = new cp.SimpleMotor(body1, body2, rate);
space.addConstraint(simpleMotor);
rate:恒定的角速度
關節(jié)使用注意事項
- 關節(jié)可連接動態(tài)剛體與靜態(tài)剛體
- 兩個剛體可以添加多個關節(jié)油宜,但要確保他們彼此不會沖突。否則會引起剛體抖動或者劇烈的旋轉
- 剛體銷毀前要先銷毀其相連的關節(jié)