LoginSignup
3
4

More than 5 years have passed since last update.

SpriteKitにおける衝突判定について

Last updated at Posted at 2015-08-04

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

の様に設定する。

参考)
https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/index.html#//apple_ref/occ/cl/SKPhysicsBody

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4