Swiftで遊ぼう! - 779 - なかなか進まぬチュートリアル
Sprite Kitチュートリアルのコードを眺めながら勉強しているんですが、なかなか理解が進みません(T_T)
ビーカーが爆発したときの接触判定をするコードをtossBeaker(:strength)メソッドに組み込んでいます。
爆発が生じたときに「cloud」と’「explosionRadius」が生成された場合に判定が進むような仕組みにしました。
let zombifyContactedCat = SKAction.run() { if let physicsBody = explosionRadius.physicsBody { for contactedBody in physicsBody.allContactedBodies() { if (physicsBody.contactTestBitMask & contactedBody.categoryBitMask) != 0 || (contactedBody.contactTestBitMask & physicsBody.categoryBitMask) != 0 { contactedBody.node?.run(turnGreen) contactedBody.categoryBitMask = PhysicsType.ZombieCat } } } }
SKPhysicsVodyが持っているallContactedBodies()メソッドも重要です。戻り値が [SKPhysicsBody] になっています。このPhysicsBodyで接触が生じると、新たにPhysicsBodyが次々に作られ(アレー型)保存されます。そのアレー型で作られたPhysicsBodyと元のPsysicsBodyのビットマスクの論理オペレーションで判定させて、2つの物体で接触が生じていれば、physicsContactオブジェクトが生成されます。そのphysicsBodyのノードでturnGreenを実行させて色が変わると。
そしてカテゴリービットマスクをゾンビに変更です。
もう少し考えないとちゃんと理解できていないような...