Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

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を実行させて色が変わると。

そしてカテゴリービットマスクをゾンビに変更です。

もう少し考えないとちゃんと理解できていないような...