我們把需要檢測(cè)碰撞的物理設(shè)置物理體(以下我們把這個(gè)物理體稱作xx)
xx.physicsBody=SKPhysicsBody(rectangleOfSize:CGSize(x:100,y:100))
然后給這個(gè)物理體設(shè)置一個(gè)標(biāo)識(shí)(BitMaskType是自己新建的一個(gè)類)
xx.physicsBody?.categoryBitMask=BitMaskType.xx
最后設(shè)置會(huì)發(fā)生碰撞的物理(比如響應(yīng)與yy發(fā)生碰撞的事件)
xx.physicsBody?.contactTestBitMask=BitMaskType.yy
最后添加代碼
func didBeginContact(contact: SKPhysicsContact) {
println("發(fā)生碰撞")
}
我們可以發(fā)現(xiàn)的確發(fā)生了碰撞(以上部分粗略描述,若有疑問請(qǐng)自行百度)
??
? 有時(shí)候我們會(huì)發(fā)現(xiàn)兩個(gè)物理題還未碰撞,但是系統(tǒng)就已經(jīng)響應(yīng)了碰撞事件,這個(gè)時(shí)候我們不妨將物理體的size設(shè)置的相對(duì)小一些。
? 有的時(shí)候兩個(gè)物理體明明已經(jīng)發(fā)生碰撞了,但是系統(tǒng)并未響應(yīng)碰撞事件,這又是為什么呢?
? 請(qǐng)注意我們的第一句代碼,也就是設(shè)置物理體大小的那一句,在這一句中我們?cè)O(shè)置了一個(gè)100*100的物理體,但是我們并未說明中心點(diǎn),而默認(rèn)的center為CGPoint(0,0).
如下圖顯示:
紅色的正方形表示你想要?jiǎng)?chuàng)建物理體,而事實(shí)上系統(tǒng)創(chuàng)建的物理體則是黃色的正方形。這個(gè)物理體在屏幕中并不顯示,但事實(shí)上是這個(gè)物理體在發(fā)生碰撞。為什么會(huì)發(fā)生這樣的情況?原因是Xcode默認(rèn)的以坐標(biāo)的左下角為中心創(chuàng)建了一個(gè)100*100的正方形。為了解決這個(gè)問題,我們修改創(chuàng)建物理體的代碼。
xx.physicsBody=SKPhysicsBody(rectangleOfSize:CGSize(x:100,y:100),center:CGPoint(x:0.5, y: 0.5))
好的在上訴代碼中我們以坐標(biāo)(50,50)為中興創(chuàng)建了一個(gè)100*100的正方形,也就是我們想象中的紅色正方形。