Cocos Creator中剛體、碰撞組件、物理組件區(qū)別
一、?如何移動(dòng)剛體?
當(dāng)我們的一個(gè)節(jié)點(diǎn)上有一個(gè)剛體,我們要進(jìn)行移動(dòng)。一般我們都會(huì)通過(guò)節(jié)點(diǎn)的setPosition進(jìn)行移動(dòng),但是剛體不會(huì)被影響,不管是Static、還是Dynamic還是Kinematic都不會(huì)被影響我們可以通過(guò)以下方式操作:
1、瞬時(shí)動(dòng)作cc.place來(lái)進(jìn)行移動(dòng)而且不會(huì)影響剛體原本的運(yùn)動(dòng)軌跡
2、Action的所有動(dòng)作。cc.moveBy;cc.moveTo;等等
二、?碰撞組件和物理組件有什么不同?
碰撞組件沒(méi)有類型之分,只要相交就會(huì)發(fā)生碰撞事件,如果不對(duì)碰撞進(jìn)行處理,那就沒(méi)有任何影響。
物理碰撞組件分類型,因?yàn)樗麄兿葧?huì)綁定剛體。如果剛體類型不同則會(huì)有不同的效果。
和Dynamtic類型剛體綁定的PhysicsBoxCollider會(huì)受重力影響,可以設(shè)置速度;
和Static類型剛體綁定的物理組件,不會(huì)受重力影響,不可以設(shè)置速度,可以通過(guò)設(shè)置位置讓其移動(dòng);
和Kinematic類型剛體綁定的物理組件,不受重力影響,可以設(shè)置速度。???????
三、?三種物理組件有什么不同?
綁定了Dynamic(運(yùn)動(dòng))類型的物理組件不能穿透綁定了Static(靜態(tài))類型的物理組件;綁定了Dynamic類型的物理組件不能穿透綁定了Kinematic類型的物理組件;
Static和Kinematic不會(huì)觸發(fā)碰撞事件,Static和Static;Kinematic和Kinematic不會(huì)觸發(fā)碰撞事件;
四、?物理組件如何進(jìn)行碰撞回調(diào)?
首先RigidBody要開(kāi)啟碰撞監(jiān)聽(tīng)。
然后當(dāng)前節(jié)點(diǎn)下有如下函數(shù)。
在函數(shù)碰撞體剛開(kāi)始接觸時(shí)調(diào)用一次。
onBeginContatct:function(contact,selfCollider,otherCollider){}
在兩個(gè)碰撞體結(jié)束接觸時(shí)被調(diào)用一次
onEndContact:fucntion(contact,setCollider,otherCollider){}
每次要處理碰撞體接觸邏輯時(shí)被調(diào)用
onPreSolve:function(contact,selfCollider,otherCollider){}
每次處理完碰撞體接觸時(shí)被調(diào)用
onPostSolve:fucntion(contact,selfCollider,otherCollider){}
五、?碰撞組件的回調(diào)
腳本里面先開(kāi)啟碰撞監(jiān)聽(tīng),因?yàn)槟J(rèn)是關(guān)閉。代碼如下:
var manager = cc.director.getCollisionManager();
manager.enabled = true;
然后有以下函數(shù):
//當(dāng)碰撞產(chǎn)生時(shí)調(diào)用
onCollisionEnter:function(other,self){
?
}
?
//在碰撞產(chǎn)生后,在碰撞結(jié)束前,每次計(jì)算完碰撞結(jié)果后調(diào)用
onCollisionStay:function(other,self){}
?
//當(dāng)碰撞結(jié)束后調(diào)用
onCollisionExit;function(other,self){}
相關(guān)應(yīng)用案例:例如跑酷類游戲(超級(jí)瑪麗)、打磚塊類游戲、桌球類游戲、趣味游戲(黃金礦工)等。如有需要可以聯(lián)系我們!