SpriteKitでは、SKNodeオブジェクトにphysicsBodyプロパティを設定することで物理効果を実現できる。
以下に例を示す。
swift
let node = SKNode(imageNamed: "node")
node.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed:"node.png"), size: node.size)
※node.png画像からSKNodeのオブジェクトを生成してphysicsBodyプロパティの設定を行う例。
衝突判定は、physicsBodyプロパティが持っているcontactTestBitMaskを設定することで可能になる。ノード間の衝突が発生するとSKPhysicsContactDelegateで定義されているdidBeginContact(contact: SKPhysicsContact) が呼ばれる。
ただし、衝突判定をさせるノード同士のcontactTestBitMaskとcategoryBitMaskの論理積(AND operation)が0以外の値になった場合にdelegateメソッド(didBeginContact)が呼ばれる。
contactTestBitMaskはデフォルトでは、0x00000000が設定されていて、categoryBitMaskはデフォルトでは、0xFFFFFFFFが設定されている。
つまり、デフォルのままでは論理積は必ず0になるため、BitMaskの値を置き換えないと衝突判定のdelegateが呼ばれないので注意。
例えば、contactTestBitMaskに0x00000001などを設定すれば論理積は、0x00000001になるためdelegateが呼ばれる。
swift
node.physicsBody?.contactTestBitMask = 0x00000001
の様に設定する。