こんにちは。今年からSwiftの学習をスタートしたものです。
iOS8 / XCode6.2の環境でSprite Kitを利用し、カジュアルゲームを作成しています。
衝突判定・BitMask関連で質問があります。
前提
Sprite Kitでは、下記3つのBitMaskを指定できると思います。
1.categoryBitMask 2.collisionBitMask 3.contactTestBitMask
そして、
それぞれ下記の意味合いを持つと認識しています。
1→自分が所属するカテゴリー
2→自分と接触した際に、障害物(ぶつかると跳ね返る)となるカテゴリー
3→自分と接触した際に、イベント(didBeginContact or didEndContactメソッド)が発火するカテゴリー
例
// BitMaskの値を定数でまとめておく struct ColliderType{ static let Player:UInt32 = (1 << 0) static let Brother:UInt32 = (1 << 1) static let Enemy:UInt32 = (1 << 3) } // マリオ(細かい設定は省略してます) let mario = SKSpriteNode(imageNamed: "mario") mario.physicsBody?.categoryBitMask = ColliderType.Player // 自分のカテゴリをPlayerに設定 mario.physicsBody?.contactTestBitMask = ColliderType.Enemy // Enemyカテゴリと接触したときにdidBeginContact()などが発火 self.addChild(mario) // ルイージ(細かい設定は省略してます) let luigi = SKSpriteNode(imageNamed: "luigi") luigi.physicsBody?.categoryBitMask = ColliderType.Brother // 自分のカテゴリをBrotherに設定 luigi.physicsBody?.contactTestBitMask = ColliderType.Enemy // Enemyカテゴリと接触したときにdidBeginContact()などが発火 self.addChild(luigi) // ワリオ(細かい設定は省略してます) let wario = SKSpriteNode(imageNamed: "wario") wario.physicsBody?.categoryBitMask = ColliderType.Enemy // 自分のカテゴリをEnemyにする wario.physicsBody?.contactTestBitMask = CollinderType.Player | ColliderType.Brother // Player or Brotherカテゴリを接触したときにdidBeginContact()などが発火 self.addChild(wario)
質問
書籍やネットのリファレンスなどを読んでいると、
categoryBitMaskの設定記述がどこにもないのにも関わらず、
contactTestBitMask = 1のようにcontactTestBitMaskだけ設定している場合があったのですが、
なぜこのようにしているのでしょうか?
例
mario.physicsBody?.contactTestBitMask = 1
categoryBitMaskのデフォルト値はUInt型で16進数 0xFFFFFFFF(10進数で4294967295)のはずなのに、contactTestBitMaskdで"1"を設定するのはなぜなんだろうと疑問が消えず、質問に至りました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/03 15:17