我們把需要檢測碰撞的物理設定物理體(以下我們把這個物理體稱作xx)
xx.physicsBody=SKPhysicsBody(rectangleOfSize:CGSize(x:100,y:100))
然後給這個物理體設定一個標識(BitMaskType是自己建立的一個類)
xx.physicsBody?.categoryBitMask=BitMaskType.xx
最後設定會發生碰撞的物理(比如響應與yy發生碰撞的事件)
xx.physicsBody?.contactTestBitMask=BitMaskType.yy
最後添加代碼
func didBeginContact(contact: SKPhysicsContact) {
println("發生碰撞")
}
我們可以發現的確發生了碰撞(以上部分粗略描述,若有疑問請自行百度)
有時候我們會發現兩個物理題還未碰撞,但是系統就已經響應了碰撞事件,這個時候我們不妨將物理體的size設定的相對小一些。
有的時候兩個物理體明明已經發生碰撞了,但是系統並未響應碰撞事件,這又是為什麼呢?
請注意我們的第一句代碼,也就是設定物理體大小的那一句,在這一句中我們設定了一個100*100的物理體,但是我們並未說明中心點,而預設的center為CGPoint(0,0).
如下圖顯示:
紅色的正方形表示你想要建立物理體,而事實上系統建立的物理體則是黃色的正方形。這個物理體在螢幕中並不顯示,但事實上是這個物理體在發生碰撞。為什麼會發生這樣的情況?原因是Xcode預設的以座標的左下角為中心建立了一個100*100的正方形。為瞭解決這個問題,我們修改建立物理體的代碼。
xx.physicsBody=SKPhysicsBody(rectangleOfSize:CGSize(x:100,y:100),center:CGPoint(x:0.5, y: 0.5))
好的在上訴代碼中我們以座標(50,50)為中興建立了一個100*100的正方形,也就是我們想象中的紅色正方形。