CreatorPrimer|物理小遊戲(物理組件)

Demo演示視頻:

Demo演示,點擊下面連接打開

視頻地址:https://v.qq.com/x/page/p0713nsrnr1.html
本視頻的工程已經上傳github,CreatroPrimer倉庫physics分支,傳送地址:https://github.com/ShawnZhang2015/CreatorPrimer/tree/physics

緊接上篇我們的物理投籃遊戲,這次介紹一下Cocosc Creator的物理引擎相關組件:剛體物理碰撞檢測

1. 剛體組件

我們先看看遊戲中的笑臉小球的剛體組件屬性,請看下圖:

Ball動態剛體

RigidBody就是Cocos Creator提供的剛體組件,將組件掛載到一個節點上,節點即具有物理特性,運行起來會隨着地心引力向下墜落(需要開啓物理效果)。

有些剛體是不需要動的,比如我們四周的圍牆,只需要將剛體組件的Type屬性設置爲static即可,請看下圖:

靜態剛體

設置好靜態剛體,運行遊戲會發現小球下墜,但會穿過圍牆,掉入無盡深淵去了。

2. 物理碰撞組件

剛體組件只是給節點賦予了重力、速度、阻力等能力,接下來我們還需要爲節點設置物理外形,這需要爲節點掛載一個碰撞組件,看下圖:

爲Ball添加圓形碰撞組件

Cocos Creator提供了四種物理碰撞組件分別是:

  1. 矩形碰撞
  2. 鏈條碰撞
  3. 圓形碰撞
  4. 多邊形碰撞

我們這裏爲Ball節點添加圓形碰撞組件,看一下組件屬性:
圓形碰撞.png

簡單說明一下組件屬性:

  1. Editing:在場景編輯器中開啓剛體外形編輯功能
  2. Tag: 爲碰撞組件設置一個ID用於對象識別
  3. Density:密度
  4. Sensor:選中不會產生物理效果,但會響應物理碰撞(籃球框就利用了這個屬性)
  5. Friction:摩擦係數
  6. Restitution:彈性係數,要讓球掉在地上能彈跳值要大於0,如果設置爲1(最大值)球可能會在原地無限彈跳
  7. Offset:剛體與節點的偏移,儘量讓兩者重合
  8. Radius:剛體半徑

其它物理碰撞組件,只是最後一個外型屬性不同,其它都一樣,我們看看四周圍牆的矩形碰撞組件屬性:

矩形剛體

Box盒形碰撞組件的剛體大小由Size屬性決定,外觀大小由節點Size屬性決定。爲剛體設置好了碰撞組件,你就能看到小球在剛體包圍盒裏快樂彈跳了,接下來我們來監聽碰撞事件。

3. 監聽碰撞事件

請認真思考一下,碰撞事件的監聽放在那個節點最好?我們以需求爲嚮導,當球進入籃框更新得分,是將碰撞監聽安裝在籃球上還是籃框上?再進一步,籃框分左右兩個,得分分別顯示得分。如果將碰撞安裝在籃球上,那籃球就需要判斷是碰到了左邊籃框,還是碰到了右邊籃,可以利用碰撞組件的Tag屬性來區別。如果將碰撞監聽安裝在左右籃框上,各自記錄碰撞次數就行了,是不是更簡單?請看下圖,我們添加一個自定義的碰撞組件:

籃球框剛體

請仔細看上圖中的組件屬性配置,籃框是空心的,球可以穿透,因此需要選擇中碰撞組件的Sensor屬性。同時添加一個我們自定義的PhysicsColliderNotification組件用於監聽物理碰撞,當發生碰撞後會發出一個通知,通知是可以自定義的,也就是一個字符串:score-left,意思是左邊得分。

同時我們在左上角記得標籤,上去監聽score-left這個消息,當這個事件發生後,更新標籤數值,可以通過組件屬性配置:

記分標籤

每當球碰到綠色的碰撞檢測點,檢查節點上的組件會發出一個“score-left”事件,同時左上角數字標籤在監聽這個事件名,去更新標籤上的數字+1(就是step的值)實現一個記分的功能。

中間的生命值標籤也是用同樣的機制實現,只不過是球碰撞到左右兩邊紅色圍欄,發出別一個事件,生命值標籤的step爲-1從表示出的是減分的效果。

4. 小結

本篇教程介紹了Cocos Creator物理引擎中的剛體和碰撞組件的常用屬性,同時分析了我們這個籃球小遊戲的碰撞檢測策略,將碰撞檢查安裝在籃框和兩邊紅色圍欄上。通過兩個通用的組件將投籃記分和碰觸邊框減分實現了,是不是很簡單呢?之前Shawn保證過,前兩篇不講代碼,只講組件使用,但下一次我們要進入組件代碼的學習,核心代碼不到50行,非常簡單,敬請期待!


如果覺得公衆號上的文章對你或你的朋友有所幫助,請記得分享給大家,願我們一起成長!

奎特爾星球

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章