SpriteKitで衝突判定を取りたいと考えています。下記の記事を参考にcategoryBitMaskとcollisionBitMaskを設定してみたのですが、衝突せずに物体がすり抜けてしまいます。
SpriteKitの衝突処理について(categoryBitMask collisionBitMask contactTestBitMask 使い方)
コード
起動時に画面の下側に円のオブジェクトを追加するようにしています。
タップ時に四角のオブジェクトを追加するように設定しています。
コメントアウトが元記事にあったものでコメントアウトしていないのもが私が新規に追加したものです。どちらを使っても衝突判定を取得することができません。
Swift
1 override func didMove(to view: SKView) { 2 3 self.physicsWorld.contactDelegate = self 4 5 let floor = SKShapeNode(circleOfRadius: 400) 6 floor.position = CGPoint(x: 0, y: -(view.frame.maxY)) 7 floor.fillColor = .red 8// floor.physicsBody?.categoryBitMask = 0b0010 9// floor.physicsBody?.collisionBitMask = 0b0100 10 floor.physicsBody?.categoryBitMask = 0b0001 11 floor.physicsBody?.collisionBitMask = 0b0001 12 self.addChild(floor) 13 } 14 15 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 16 if let touchPos = touches.first?.previousLocation(in: self){ 17 let rect = SKShapeNode(rectOf: CGSize(width: 50.0, height: 50.0)) 18 rect.position = touchPos 19 rect.fillColor = .blue 20 rect.physicsBody = SKPhysicsBody(rectangleOf: rect.frame.size) 21// rect.physicsBody?.categoryBitMask = 0b0001 22// rect.physicsBody?.collisionBitMask = 0b0100 23 rect.physicsBody?.categoryBitMask = 0b0001 24 rect.physicsBody?.collisionBitMask = 0b0001 25 self.addChild(rect) 26 } 27 }
記事の解説よると、自分のcategoryBitMaskと相手のcollisionBitMaskが同じであれば衝突が行うという旨が書いてあったので、このコードで衝突判定を取得できると思ったのですが、できていない状態です。
なにがいけないのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。