chipmunk學(xué)習(xí)筆記二

chipmunk約束

約束是用來描述兩個剛體如何相互作用的。簡單來說就是關(guān)節(jié)。

詳情參見:Chipmunk2D中文手冊

Pin Joints

將2個剛體用固定的杠桿連接,兩個剛體相對位置固定,可繞各自連接點自由旋轉(zhuǎn)。

    var pinJoint = new cp.PinJoint(body1, body2, anchor1, anchor1);
    space.addConstraint(pinJoint);

anchor1:杠桿連接位置,相對于body1重心的相對坐標

anchor2:杠桿連接位置,相對于body2重心的相對坐標

Slide Joints

將2個剛體用可伸縮的杠桿連接,兩個剛體相對位置固定,可繞各自連接點自由旋轉(zhuǎn)。

    var slideJoint = new cp.SlideJoint(body1, body2, anchor1, anchor1, min, max);
    space.addConstraint(slideJoint);

min:杠桿最小伸縮長度
max:杠桿最大伸縮長度

Pivot Joints

將2個剛體用長度為0的杠桿連接,兩個剛體相對位置固定,可繞各自連接點自由旋轉(zhuǎn)。

可用于鼠標拖動剛體

    // 創(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與杠桿連接,可在杠桿上移動旋轉(zhuǎn),可繞連接點自由旋轉(zhuǎn)

    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個剛體用彈簧連接,可繞各自連接點自由旋轉(zhuǎn)

    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

棘輪關(guān)節(jié),具體效果不好描述。

剛體1順時針轉(zhuǎn)動不影響剛體2,逆時針轉(zhuǎn)動則剛體2同時逆時針轉(zhuǎn)動同等角度

剛體2逆時針轉(zhuǎn)動不影響剛體2,順時針轉(zhuǎn)動則剛體1同時順時針轉(zhuǎn)動同等角度

    var ratchetJoint = new cp.RatchetJoint(body1, body2, phase, ratchet);
    space.addConstraint(ratchetJoint);

ratchet:“clicks”間的距離

phase: 決定棘輪角度的時候的初始位移

這個參數(shù)的效果我也不太懂,具體的自己試

Gear Joint

齒輪關(guān)節(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:恒定的角速度

關(guān)節(jié)使用注意事項

  1. 關(guān)節(jié)可連接動態(tài)剛體與靜態(tài)剛體
  2. 兩個剛體可以添加多個關(guān)節(jié),但要確保他們彼此不會沖突。否則會引起剛體抖動或者劇烈的旋轉(zhuǎn)
  3. 剛體銷毀前要先銷毀其相連的關(guān)節(jié)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首先要熟悉一些基本的力學(xué)名詞及相關(guān)公式 剛體(Rigidbody):剛體是指在運動中和受到力的作用后,形狀和大小不...
    FLY旳影子閱讀 12,207評論 0 11
  • Unity中可以使用物理關(guān)節(jié)組件使物體連接起來,如圖1.1是給游戲?qū)ο筇砑雨P(guān)節(jié)組件的步驟: 也可以在物體的Insp...
    S_H_C閱讀 2,663評論 0 1
  • 去面試了兩個工作,盡力了,看著高手如云的,人才濟濟,我也是弱爆了,哪個老總會給你一個學(xué)習(xí)機會啊,都是要看...
    晶晶201708閱讀 243評論 0 0
  • 必然
    冠滿閱讀 179評論 0 0
  • 星期五下午,我、王赫、翟芷墨、劉一蕾和張毅涵給大家講了火災(zāi)的逃生方法以及火災(zāi)的危害。 從中,我們了解到:火災(zāi)很可怕...
    李一禪閱讀 273評論 0 1

友情鏈接更多精彩內(nèi)容