【飛機(jī)游戲】【Cocos】【P2】實(shí)現(xiàn)飛機(jī)和子彈的碰撞邏輯

0 上一期我們實(shí)現(xiàn)了創(chuàng)建敵機(jī)以及發(fā)生敵機(jī)子彈的功能。本期我們將實(shí)現(xiàn)飛機(jī)與子彈間的碰撞邏輯。
0.1 設(shè)置碰撞檢測(cè)邏輯。
0.2 設(shè)置飛機(jī)和子彈的碰撞盒。
0.3 處理飛機(jī)發(fā)生碰撞后的行為。
0.4 處理子彈發(fā)生碰撞后的行為。

1.0 設(shè)置碰撞檢測(cè)邏輯。
1.1 我們首先彈出引擎的Project欄的Projection Settings框。

1.2 選中Physics欄,在Collision Matrix里輸入4個(gè)對(duì)象分別表示玩家飛機(jī)、敵機(jī)、玩家子彈、敵機(jī)子彈。碰撞矩陣的邏輯是一個(gè)2進(jìn)制掩碼的矩陣。通過(guò)邏輯判斷即可設(shè)置其碰撞邏輯。此時(shí)玩家飛機(jī)能與敵機(jī)和敵機(jī)子彈碰撞,敵機(jī)能與玩家飛機(jī)及玩家子彈碰撞,玩家子彈可以與敵機(jī)和敵機(jī)子彈碰撞,敵機(jī)子彈可以與玩家飛機(jī)及玩家子彈碰撞。


2.0 設(shè)置飛機(jī)和子彈的碰撞盒。
2.1 進(jìn)入玩家飛機(jī)的預(yù)制信息(prefab)。
2.2 點(diǎn)擊Add Component添加碰撞碰撞包圍盒,調(diào)整包圍盒的尺寸及位置,讓其貼合這包裹住飛機(jī)模型。
2.3 再次點(diǎn)擊Add Component將玩家飛機(jī)設(shè)置為運(yùn)動(dòng)學(xué)剛體,碰撞類型設(shè)置為玩家飛機(jī)(SELF_PANE)。

2.3 使用相似的邏輯設(shè)置敵機(jī)的碰撞信息。不同的地方在于敵機(jī)的碰撞類型要設(shè)置為ENEMY_PANE。


2.4 使用相似的邏輯設(shè)置子彈的碰撞信息。此時(shí)子彈的碰撞類型有兩種:一種是玩家子彈(SELF_BULLET),另一種是敵機(jī)子彈(ENEMY_BULLET)。我們此時(shí)只需要設(shè)置為其中一種情況即可。之后在腳本中的實(shí)例化子彈模塊里我們可以再靈活處理其碰撞類型。

?

3.0 處理飛機(jī)發(fā)生碰撞后的行為。
3.1 在constant中添加4種碰撞類型。

3.2 設(shè)置玩家飛機(jī)的碰撞事件監(jiān)聽回調(diào)函數(shù)。當(dāng)玩家飛機(jī)與敵機(jī)及敵機(jī)子彈碰撞時(shí),在控制面板打印掉血(實(shí)際的掉血工作之后再開發(fā))。

3.3 設(shè)置敵機(jī)的碰撞事件監(jiān)聽回調(diào)函數(shù)。當(dāng)敵機(jī)與玩家飛機(jī)及玩家子彈碰撞時(shí),銷毀敵機(jī)實(shí)例對(duì)象的節(jié)點(diǎn)。

?

4.0 處理子彈發(fā)生碰撞后的行為。
4.1 在實(shí)例化敵機(jī)和玩家子彈時(shí),設(shè)置對(duì)像碰撞的Group類型,以及掩碼類型。其中敵機(jī)子彈的Group為SELEF_BULLET,掩碼為ENEMY_PLANE和ENEMY_BULLET。玩家子彈的Group為ENEMY_BULLET,掩碼為SELEF_PLANE和SELEF_BULLET。

4.2 設(shè)置敵機(jī)子彈的碰撞事件監(jiān)聽回調(diào)函數(shù)。子彈只要一發(fā)生碰撞就直接銷毀實(shí)例的對(duì)象節(jié)點(diǎn)。

4.3 運(yùn)行游戲后可以看到。


