【從0開始學(xué)Laya】15-2d物理引擎(1)-概念

經(jīng)典的物理游戲如:憤怒的小鳥,小鱷魚頑皮愛洗澡等,都是用物理系統(tǒng)制作。
2D物理引擎由剛體和碰撞體以及關(guān)節(jié)構(gòu)成。
當(dāng)物體包含碰撞體的時(shí)候物體可以發(fā)生碰撞,當(dāng)物體含有碰撞體不含有剛體的時(shí)候可以被碰撞但不發(fā)生物理運(yùn)動(dòng)學(xué)動(dòng)力影響
開發(fā)者可以不用關(guān)心物體是怎么碰撞的,laya引擎底層已經(jīng)幫我們做好,開發(fā)者只要給想要做碰撞的物體掛上相應(yīng)的碰撞體以及剛體組件即可。

剛體rigidbody :剛體是指在運(yùn)動(dòng)中和受力作用后,形狀和大小不變,而且內(nèi)部各點(diǎn)的相對(duì)位置不變的物體,比如模擬鉛球,石頭等。
碰撞體collider:碰撞體是給物體加一個(gè)判定框,當(dāng)碰撞框重疊的時(shí)候,兩物體發(fā)生碰撞,這是碰撞的檢測(cè)區(qū)域。
關(guān)節(jié)joint: 關(guān)節(jié)可以對(duì)兩個(gè)或多個(gè)物體進(jìn)行一種約束,可選。

Laya 2D物理引擎支持的關(guān)節(jié)有:

  1. 距離關(guān)節(jié)DistanceJoint:兩個(gè)物體上面各自有一點(diǎn),兩點(diǎn)之間的距離固定不變。
  2. 齒輪關(guān)節(jié)GearJoint:用來模擬兩個(gè)齒輪間的約束關(guān)系,齒輪旋轉(zhuǎn)時(shí),產(chǎn)生的動(dòng)量有兩種輸出方式,一種是齒輪本身的角速度,另一種是齒輪表面的線速度。
  3. 馬達(dá)關(guān)節(jié)MotorJoint:用來限制兩個(gè)剛體,使其相對(duì)位置和角度保持不變,馬達(dá)關(guān)節(jié)永遠(yuǎn)向目標(biāo)點(diǎn)移動(dòng),并且保持特定的角度。
  4. 鼠標(biāo)關(guān)節(jié)MouseJoint:用于鼠標(biāo)操控物體。它試圖將物體拖向當(dāng)前鼠標(biāo)光標(biāo)的位置。而在旋轉(zhuǎn)方面就沒有限制。
  5. 平移關(guān)節(jié)PrismaticJoint : 移動(dòng)關(guān)節(jié)允許兩個(gè)物體沿指定軸相對(duì)移動(dòng),它會(huì)阻止相對(duì)旋轉(zhuǎn)。
  6. 滑輪關(guān)節(jié)PulleyJoint:它將兩個(gè)物體接地(ground)并彼此連接,當(dāng)一個(gè)物體上升,另一個(gè)物體就會(huì)下降。
  7. 旋轉(zhuǎn)關(guān)節(jié)RevoluteJiont:強(qiáng)制兩個(gè)物體共享一個(gè)錨點(diǎn),兩個(gè)物體相對(duì)旋轉(zhuǎn)。
  8. 繩索關(guān)節(jié)RopeJoint :限制兩個(gè)點(diǎn)之間的最大距離。即使在很大的負(fù)載下也阻止連接的物體之間的拉伸。
  9. 焊接關(guān)節(jié)WeldJoint:使兩個(gè)物體不能相對(duì)運(yùn)動(dòng),兩個(gè)剛體的相對(duì)位置和角度都保持不變,像一個(gè)整體。
  10. 輪子關(guān)節(jié)WheelJoint:圍繞節(jié)點(diǎn)旋轉(zhuǎn),包含彈性屬性,使得剛體在節(jié)點(diǎn)位置發(fā)生彈性偏移。

剛體RigidBody

RigidBody類繼承自 Component,剛體支持三種類型:static,dynamic和kinematic,默認(rèn)為dynamic。

  1. static為靜態(tài)類型,靜止不動(dòng),不受重力影響,質(zhì)量無限大,可以通過節(jié)點(diǎn)移動(dòng),旋轉(zhuǎn),縮放進(jìn)行控制;
    在模擬環(huán)境下靜態(tài)物體是不會(huì)移動(dòng)的,就好像有無限大的質(zhì)量。在Box2D的內(nèi)部會(huì)將質(zhì)量至反,存儲(chǔ)為零。靜態(tài)物體有零速度。靜態(tài)物體不能和其它靜態(tài)或運(yùn)動(dòng)學(xué)物體進(jìn)行碰撞。
  2. dynamic為動(dòng)態(tài)類型,受重力影響;
    動(dòng)態(tài)物體可以進(jìn)行全模擬。它們可以被用戶手動(dòng)移動(dòng),但是通常情況下會(huì)根據(jù)受力進(jìn)行移動(dòng)。動(dòng)態(tài)物體可以和任何物體發(fā)生碰撞。動(dòng)態(tài)物體總是擁有有限的非零質(zhì)量。如果你嘗試設(shè)置動(dòng)態(tài)物體的質(zhì)量為零,它會(huì)自動(dòng)設(shè)置一個(gè)1千克質(zhì)量的物體。
  3. kinematic為運(yùn)動(dòng)類型,不受重力影響,可以通過施加速度或者力的方式使其運(yùn)動(dòng)。

屬性說明

1)gravityScale
重力縮放系數(shù),默認(rèn)為1,即正常重力,設(shè)置為0為沒有重力。
2)angularVelocity
角速度,設(shè)置會(huì)導(dǎo)致旋轉(zhuǎn),單位為弧度,實(shí)際使用中需要約束。
3)angularDampin
旋轉(zhuǎn)速度阻尼系數(shù),范圍從0到無窮大,0表示沒有阻尼,無窮大表示滿阻尼,通常阻尼的值應(yīng)該在0到0.1之間。
4)linearVelocity
線性運(yùn)動(dòng)速度,需要輸入向量,比如10,10,代表x軸向右速度10,y軸向下速度10。
5)linearDamping
線性速度阻尼系數(shù),范圍從0到無窮大,0表示沒有阻尼,無窮大表示滿阻尼,通常阻尼的值應(yīng)該在0到0.1之間。
6)bullet
是否高速移動(dòng)的物體,設(shè)置為true,可以防止高速穿透。
7)allowSleep
是否允許休眠,允許休眠能提高性能,這個(gè)一般都要設(shè)置為true
8)allowRotation
是否允許旋轉(zhuǎn),如果不希望剛體旋轉(zhuǎn),這設(shè)置為false。
9)group
指定了該主體所屬的碰撞組,默認(rèn)為0.

碰撞體Collider

碰撞體類型分為以下4種:

  1. 矩形碰撞體
  2. 圓形碰撞體
  3. 線形碰撞體
  4. 多邊形碰撞體

基類共有屬性說明

1)x,y
相對(duì)節(jié)點(diǎn)x,y軸偏移。
2)friction
摩擦力,取值范圍0-1,值越大,摩擦越大,默認(rèn)值為0.2。
3)restitution
彈性系數(shù),取值范圍0-1,值越大,彈性越大,默認(rèn)值為0。
4)density
密度值,值可以為零或者是正數(shù),建議使用相似的密度,這樣做可以改善堆疊穩(wěn)定性,默認(rèn)值為10。
5)isSensor
是否是傳感器,傳感器能夠觸發(fā)碰撞事件,但不會(huì)產(chǎn)生碰撞反應(yīng)??梢岳斫鉃門rigger。
6)label
自定義標(biāo)簽

矩形碰撞體


屬性說明
1)width,height
矩形的寬度和高度。
2)fitsize按鈕
點(diǎn)一下這個(gè)按鈕,碰撞體的大小就會(huì)自適應(yīng)為節(jié)點(diǎn)寬高。

圓形碰撞體

圖1
radius

圓的半徑,必須為正數(shù)。

線形碰撞體

points

用逗號(hào)隔開的點(diǎn)的集合,格式:x,y,x,y … 設(shè)置點(diǎn)之后,從第一個(gè)點(diǎn)依次連接到最后一個(gè)點(diǎn)的連線即為線形碰撞體。在編輯器中,在線上單擊左鍵增加一個(gè)點(diǎn),點(diǎn)可以拖拽,雙擊點(diǎn)會(huì)刪除這個(gè)點(diǎn)。

多邊形碰撞體

points

用逗號(hào)隔開的點(diǎn)的集合,格式:x,y,x,y ..
2D多邊形碰撞體,暫時(shí)不支持凹多邊形,如果是凹多邊形,先手動(dòng)拆分為多個(gè)凸多邊形
節(jié)點(diǎn)個(gè)數(shù)最多是b2_maxPolygonVertices,這數(shù)值默認(rèn)是8,所以點(diǎn)的數(shù)量不建議超過8個(gè)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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