見出し画像

Swiftでいこう--ゲームをつくろ!7

"contactTestBitMask"についてまとめます。

categoryBitMask、collisionBitMaskと衝突判定時に使う命令を調べてきました。この2つで衝突するもの、通過するものを規定できました。

"contactTestBitMask"は衝突判定時に衝突したことを通知することができる命令みたいです。

collisionBitMaskの代わりにcontactTestBitMaskを使います。そうすると通知ができるようになります。通知の受け側ですが、触りはじめてからは

 func didBegin(_ contact: SKPhysicsContact) {
  // code
   }

と、終わりの判定は、

func didEnd(_ contact: SKPhysicsContact) {
// code
   }

となります。ただこれだけでは通過する時にずっと通知され続けます。

そこで、

birdBrown.physicsBody = SKPhysicsBody(texture: birdBrown.texture!, size: birdBrown.size)

だったところを、

birdBrown.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 100))

"texture""rectangleOf"に変えることで触った最初と最後のみ一回のみの接触が得られます。

具体的には

    birdBrown.physicsBody = SKPhysicsBody(texture: birdBrown.texture!, size: birdBrown.size)
    birdRed.physicsBody = SKPhysicsBody(texture: birdRed.texture!, size: birdRed.size)
    birdBlue.physicsBody = SKPhysicsBody(texture: birdBlue.texture!, size: birdBlue.size)
    
    func didBegin(_ contact: SKPhysicsContact) {
        print("開始")
    }
    
    func didEnd(_ contact: SKPhysicsContact) {
        print("終了")
    }
 

の時は、実行すると、

開始
開始
開始
開始
開始
開始
開始

と触ってるときはずっとコンソールに表示されます。

   birdBrown.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 100))
   birdRed.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 100))
   birdBlue.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 100))

とした場合は

開始
終了

のみとなります。1回のみになりました。


この記事が気に入ったらサポートをしてみませんか?