iOS標準の2D絵動かしライブラリであるSpriteKitですが、物理エンジンが同梱されており、剛体としてふるまってほしいNodeに、 SKPhysicsBody
を設定するだけで使えて便利です。
ところでこのオブジェクトは、CategoryBitMask
、CollisionBitMask
、 ContactTestBitMask
と3つの整数のプロパティを持っていて、ビットフラグを設定することで、衝突するしない、コールバック起動するしない の設定ができるようになっていますが、ビットフラグが3つも必要なのか? 本当に3つも必要なのか? と、設計思想が理解できなくて、どれがどれか覚えられないのでメモっておこうと思いました。
特に、衝突する側か、される側かを意識して使う必要があり、衝突される側の設定を変更して見守っても何の変化しないことが多々あるので注意です。
プロパティ名 | 意味 | デフォルト値 |
---|---|---|
categoryBitMask |
自分が属するカテゴリ |
0xFFFFFFFF (全てに属する) |
collisionBitMask |
衝突する側のとき、跳ね返るふるまいをする相手のカテゴリ |
0xFFFFFFFF (全てに衝突する) |
contactTestBitMask |
衝突する側のとき、衝突コールバック (SKPhysicsContactDelegate のメソッド) を起動する相手になるカテゴリ |
0 (デフォルトでは何に衝突しても起動されない) |
僕が最初にはまった落とし穴
- 衝突される側 の
collisionBitMask
を 0 にしても 相変らず衝突するので「あれ?」となった - おなじく衝突される側 の
categoryBitMask
を 0にすると今度は衝突しなくなるので「あれ?」となった -
collisionBitMask
、contactTestBitMask
は、 衝突する側のときだけ意味がある