本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會html
此書對應的代碼地址node
對一個小球節點設置屬性: github
Scene Kit的位掩碼設計其實和cocos2d-x3.0是相似的. 每次碰撞時,用本身的Collision mask(碰撞掩碼)和別人的Category mask(分類掩碼)作按位與運算,運算結果爲零則不能碰撞,運算結果不爲零則會碰撞. 同理Contact mask(接觸掩碼)也是和別人的Category mask(分類掩碼)作按位與運算,運算結果爲零則不會通知,運算結果不爲零則會通知.swift
//設置各節點的Category mask(分類掩碼)
//Ball: 1 (Decimal) = 00000001 (Binary)
//Barrier: 2 (Decimal) = 00000010 (Binary)
//Brick: 4 (Decimal) = 00000100 (Binary)
//Paddle: 8 (Decimal) = 00001000 (Binary)
enum ColliderType: Int {
case Ball = 0b1
case Barrier = 0b10
case Brick = 0b100
case Paddle = 0b1000
}
//設置小球與哪些類型碰撞時調用代理通知
ballNode.physicsBody?.contactTestBitMask = ColliderType.Barrier.rawValue
| ColliderType.Brick.rawValue | ColliderType.Paddle.rawValue
複製代碼
scnScene.physicsWorld.contactDelegate = self 設置SCNPhysicsContactDelegate,會有三個代理方法:app