天天看點

《Cocos2D權威指南》——2.4 碰撞檢測

很快大家就會發現,射出的子彈和敵機都是“擦肩而過”,毫無威力,這顯然不合邏輯。這裡我們介紹cocos2d裡常用的碰撞檢測方法,用于檢測遊戲對象之間的碰撞。雖然這種碰撞比較簡單,檢測精度也不是很高,但是對于一般遊戲來說已經足夠了。

在介紹實際的碰撞檢測方法之前,我們需要一個輔助方法,根據精靈目前的位置算出它的“可碰撞區域”,如代碼清單2-24所示。

代碼清單2-24 輔助方法的實作

此方法根據精靈所在位置和精靈的實際大小計算出一個矩形區域代表精靈的可碰撞區域。

具體的碰撞檢測代碼如代碼清單2-25所示。

代碼清單2-25 碰撞檢測

在這個遊戲中我們隻需要關心子彈與敵機的碰撞、敵機與玩家飛機的碰撞就行了。是以,首先我們計算出子彈的碰撞區域,周遊所有的敵機,逐個判斷敵機與子彈以及敵機與玩家飛機之間的碰撞。

注意 這裡用cgrectintersectsrect方法檢測碰撞,此方法判斷兩個矩形是否相交。如果形狀不規則,或者原始精靈圖檔的透明像素過多,這種檢測方法就會非常不準确。後面學習實體引擎時,我們将介紹一種更加精确的碰撞檢測方法。

這裡需要注意兩點:

檢測對象必須在螢幕可見範圍之内;

檢測到碰撞以後需要停止action,再做相應的碰撞處理邏輯,比如讓敵機消失、計分之類。

當然,由于此處敵機采用複用的方式,擊中以後并不是删除這個對象,而隻是把可見性設定為no,然後放回數組裡,下次又可從裡面再取出來,再次向玩家發起進攻。

編譯并運作,體驗殺死敵機的快感吧!

繼續閱讀