Swiftで遊ぼう! - 728 - ノードの衝突判定もなんとなくこなしてます
ノードに重力空間をまとわせるためにSKPhysicsBodyを設定して、状態を判定するためのカテゴリーも設定します。
まずモンスターのカテゴリーを考えます。
let monster = SKSpriteNode(imageNamed: "monster") // ここからphysicsBodyの設定 monster.physicsBody = SKPhysicsBody(rectangleOf: monster.size) // 1 monster.physicsBody?.isDynamic = true // 2 monster.physicsBody?.categoryBitMask = PhysicsCategory.Monster monster.physicsBody?.contactTestBitMask = PhysicsCategory.Projectile monster.physicsBody?.collisionBitMask = PhysicsCategory.None
- スプライトを作成した直後に「physicsBody」を着せます。monsterのイメージの大きさから四角形の衝突空間が形成されます。
- 「isDynamic」はデフォルトで「true」なんで書く必要はないのですが明示的に分かり易く記述します。
- さて「categoryBitMask」になっていますが、これがビットで立てたフラグですね。最初はモンスターとしてフラグを立てます。UInt32なので、「0b0000 0000 0000 0000 0000 0000 0000 0001」ということになりますね。カテゴリーは32種類というのは、それぞれ1個だけ「1」に変更しているということです。
- 「contactTestBitMask」は、2つの「カテゴリービットマスク」をANDオペレーションで評価して、「0」以外なら衝突が生じてSKPhysicsContactオブジェクトが作られるってことです。
- これと他のphysicsBodyのカテゴリービットマスクとANDオペレーションをして「0」以外だったら衝突がこのノードに影響を及ぼすのですが、ここで「0」を設定しているので、衝突は常に「0」で影響は出ません。
ビットマスクの使い方は慣れが必要ですね。私のようなド素人は最初かなり混乱しました(^^;)
今日はここまで。