關於cocos2d中物理引擎碰撞掩碼的設定

2021-07-28 23:51:34 字數 1454 閱讀 5189

當物理引擎檢測到兩個body傳送的碰撞資訊後,會呼叫相應的時間方法來通知系統,比如兩個body已經發生碰撞,兩個body已經分離。

接收碰撞事件的方法為oncontactbegin;

接收分離事件的方法為oncontactseperate

一、碰撞掩碼分為以下三種:

1.categorybitmask:該掩碼會與另乙個物體的另外兩個掩碼contacttestbitmask、collisionbitmask按位與,來確定是否可以碰撞

2.contacttestbitmask:確定兩個物體碰撞時是否呼叫oncontactbegin

3.collisionbitmask:確定兩個物體是否允許碰撞

如果希望a和b允許碰撞,則

a的categorybitmask與b的collisionbitmask與運算結果為0

b的categorybitmask與a的collisionbitmask與運算結果為0

否則a和b就不允許碰撞,接觸後直接彈開

如果希望a和b發生碰撞檢測,即呼叫oncontactbegin,則

a的categorybitmask與b的contacttestbitmask與運算結果不為0

b的categorybitmask與a的contacttestbitmask與運算結果不為0

三個掩碼的預設值如下:

categorybitmask:uint_max

contacttestbitmask:uint_max

collisionbitmask:0

即預設情況下a和b既允許碰撞,也允許碰撞後呼叫oncontactbegin

示例:

(1)飛彈的掩碼:

categorybitmask:0x01

contacttestbitmask:0x03

collisionbitmask:0x03

(2)飛船的掩碼:

categorybitmask:0x01

contacttestbitmask:0x03

collisionbitmask:0x01

(3)七邊形的掩碼:

categorybitmask:0x01

contacttestbitmask:0x02

collisionbitmask:0x00

從中可以看出飛彈與飛船之間不允許碰撞,飛彈、飛船與分別與七邊形接觸允許碰撞。

同時飛彈、飛船以及七邊形只要碰撞都可以呼叫oncontactbegin的方法

注:會遇到使用預設值無法呼叫oncontactbegin的方法,解決辦法是對每個body重新設定三個掩碼就能解決

二、關於oncontactbegin函式的返回值

1.當函式返回值為true時,則兩個相撞的body會發生碰撞而彈開

2.當函式返回值為false時,則兩個相撞的body會相互穿透對方,繼續自己的運動

cocos2d實現語音 Cocos2d 聲音API

param url 聲音路徑 cc.audioengine.playmusic url loop 停止背景 param releasedata 是否釋放聲音資料,預設為false cc.audioengine.stopmusic releasedata 暫停背景 cc.audioengine.pau...

cocos 2d中CCUserDefault的使用

cocos 2d中的ccuserdefault的使用非常簡單,網上有一位大神 已經把這個類全部都注釋了,一目了然。非常感謝!下面介紹下這個類的傻瓜用法 1.在需要使用的類中的引入標頭檔案 include support ccuserdefault.h include stdio.h include ...

搭建cocos2d遊戲引擎環境

ios遊戲開發引擎,常用的cocos2d,unity引擎。unity是收費的,cocos2d是免費開源的。cocos2d引擎開發環境的搭建 step3.啟動終端,進入cocos2d for iphone解壓後的目錄,執行.install templates.sh u 命令 開始安裝cocos2d 如...