Demo演示視頻:

視頻地址:https://v.qq.com/x/page/p0713nsrnr1.html
本視頻的工程已經(jīng)上傳github,CreatroPrimer倉(cāng)庫(kù)physics分支,傳送地址:https://github.com/ShawnZhang2015/CreatorPrimer/tree/physics
緊接上篇我們的物理投籃游戲,這次介紹一下Cocosc Creator的物理引擎相關(guān)組件:剛體與物理碰撞檢測(cè)。
1. 剛體組件
我們先看看游戲中的笑臉小球的剛體組件屬性,請(qǐng)看下圖:

RigidBody就是Cocos Creator提供的剛體組件,將組件掛載到一個(gè)節(jié)點(diǎn)上,節(jié)點(diǎn)即具有物理特性,運(yùn)行起來(lái)會(huì)隨著地心引力向下墜落(需要開(kāi)啟物理效果)。
有些剛體是不需要?jiǎng)拥?,比如我們四周的圍墻,只需要將剛體組件的Type屬性設(shè)置為static即可,請(qǐng)看下圖:

設(shè)置好靜態(tài)剛體,運(yùn)行游戲會(huì)發(fā)現(xiàn)小球下墜,但會(huì)穿過(guò)圍墻,掉入無(wú)盡深淵去了。
2. 物理碰撞組件
剛體組件只是給節(jié)點(diǎn)賦予了重力、速度、阻力等能力,接下來(lái)我們還需要為節(jié)點(diǎn)設(shè)置物理外形,這需要為節(jié)點(diǎn)掛載一個(gè)碰撞組件,看下圖:

Cocos Creator提供了四種物理碰撞組件分別是:
- 矩形碰撞
- 鏈條碰撞
- 圓形碰撞
- 多邊形碰撞
我們這里為Ball節(jié)點(diǎn)添加圓形碰撞組件,看一下組件屬性:

簡(jiǎn)單說(shuō)明一下組件屬性:
- Editing:在場(chǎng)景編輯器中開(kāi)啟剛體外形編輯功能
- Tag: 為碰撞組件設(shè)置一個(gè)ID用于對(duì)象識(shí)別
- Density:密度
- Sensor:選中不會(huì)產(chǎn)生物理效果,但會(huì)響應(yīng)物理碰撞(籃球框就利用了這個(gè)屬性)
- Friction:摩擦系數(shù)
- Restitution:彈性系數(shù),要讓球掉在地上能彈跳值要大于0,如果設(shè)置為1(最大值)球可能會(huì)在原地?zé)o限彈跳
- Offset:剛體與節(jié)點(diǎn)的偏移,盡量讓兩者重合
- Radius:剛體半徑
其它物理碰撞組件,只是最后一個(gè)外型屬性不同,其它都一樣,我們看看四周?chē)鷫Φ木匦闻鲎步M件屬性:

Box盒形碰撞組件的剛體大小由Size屬性決定,外觀大小由節(jié)點(diǎn)Size屬性決定。為剛體設(shè)置好了碰撞組件,你就能看到小球在剛體包圍盒里快樂(lè)彈跳了,接下來(lái)我們來(lái)監(jiān)聽(tīng)碰撞事件。
3. 監(jiān)聽(tīng)碰撞事件
請(qǐng)認(rèn)真思考一下,碰撞事件的監(jiān)聽(tīng)放在那個(gè)節(jié)點(diǎn)最好?我們以需求為向?qū)?,?dāng)球進(jìn)入籃框更新得分,是將碰撞監(jiān)聽(tīng)安裝在籃球上還是籃框上?再進(jìn)一步,籃框分左右兩個(gè),得分分別顯示得分。如果將碰撞安裝在籃球上,那籃球就需要判斷是碰到了左邊籃框,還是碰到了右邊籃,可以利用碰撞組件的Tag屬性來(lái)區(qū)別。如果將碰撞監(jiān)聽(tīng)安裝在左右籃框上,各自記錄碰撞次數(shù)就行了,是不是更簡(jiǎn)單?請(qǐng)看下圖,我們添加一個(gè)自定義的碰撞組件:

請(qǐng)仔細(xì)看上圖中的組件屬性配置,籃框是空心的,球可以穿透,因此需要選擇中碰撞組件的Sensor屬性。同時(shí)添加一個(gè)我們自定義的PhysicsColliderNotification組件用于監(jiān)聽(tīng)物理碰撞,當(dāng)發(fā)生碰撞后會(huì)發(fā)出一個(gè)通知,通知是可以自定義的,也就是一個(gè)字符串:score-left,意思是左邊得分。
同時(shí)我們?cè)谧笊辖怯浀脴?biāo)簽,上去監(jiān)聽(tīng)score-left這個(gè)消息,當(dāng)這個(gè)事件發(fā)生后,更新標(biāo)簽數(shù)值,可以通過(guò)組件屬性配置:

每當(dāng)球碰到綠色的碰撞檢測(cè)點(diǎn),檢查節(jié)點(diǎn)上的組件會(huì)發(fā)出一個(gè)“score-left”事件,同時(shí)左上角數(shù)字標(biāo)簽在監(jiān)聽(tīng)這個(gè)事件名,去更新標(biāo)簽上的數(shù)字+1(就是step的值)實(shí)現(xiàn)一個(gè)記分的功能。
中間的生命值標(biāo)簽也是用同樣的機(jī)制實(shí)現(xiàn),只不過(guò)是球碰撞到左右兩邊紅色圍欄,發(fā)出別一個(gè)事件,生命值標(biāo)簽的step為-1從表示出的是減分的效果。
4. 小結(jié)
本篇教程介紹了Cocos Creator物理引擎中的剛體和碰撞組件的常用屬性,同時(shí)分析了我們這個(gè)籃球小游戲的碰撞檢測(cè)策略,將碰撞檢查安裝在籃框和兩邊紅色圍欄上。通過(guò)兩個(gè)通用的組件將投籃記分和碰觸邊框減分實(shí)現(xiàn)了,是不是很簡(jiǎn)單呢?之前Shawn保證過(guò),前兩篇不講代碼,只講組件使用,但下一次我們要進(jìn)入組件代碼的學(xué)習(xí),核心代碼不到50行,非常簡(jiǎn)單,敬請(qǐng)期待!
如果覺(jué)得公眾號(hào)上的文章對(duì)你或你的朋友有所幫助,請(qǐng)記得分享給大家,愿我們一起成長(zhǎng)!