アプリで 2 つのオブジェクト間の接触を検出したいと考えています。enum
さまざまなタイプを定義する必要があります。
enum ColliderType: UInt32 {
case Ball = 0b010
case Object = 0b001
case Gap = 0b100
}
私も追加SKPhysicsContactDelegate
しましたSKView
:
でdidMoveToView
、私は持っています
self.physicsWorld.contactDelegate = self
だからここに私が定義した私のオブジェクトがあります
ball = SKSpriteNode(texture: ballTexture)
ball.position = CGPoint(x: CGRectGetMidX(self.frame) - self.frame.width/12, y: self.frame.size.height - (self.frame.size.height - 100))
ball.physicsBody = SKPhysicsBody(circleOfRadius: ballTexture.size().height)
ball.physicsBody!.dynamic = false
ball.physicsBody?.allowsRotation = false
ball.physicsBody!.categoryBitMask = ColliderType.Ball.rawValue
ball.physicsBody!.contactTestBitMask = ColliderType.Object.rawValue
ball.physicsBody!.collisionBitMask = ColliderType.Object.rawValue
let boxTexture = SKTexture(imageNamed: "Obstacle.png")
let box1 = SKSpriteNode(texture: boxTexture)
box1.size = CGSizeMake(self.frame.width/4, self.frame.width/8)
box1.runAction(moveAndRemoveBoxes)
box1.physicsBody = SKPhysicsBody(rectangleOfSize: box1.size)
box1.physicsBody!.dynamic = false
box1.physicsBody!.categoryBitMask = ColliderType.Object.rawValue
box1.physicsBody!.contactTestBitMask = ColliderType.Ball.rawValue
box1.physicsBody!.collisionBitMask = ColliderType.Object.rawValue
let gap = SKSpriteNode()
gap.size = box1.size
gap.physicsBody = SKPhysicsBody(rectangleOfSize: box1.size)
gap.physicsBody!.dynamic = false
gap.physicsBody!.categoryBitMask = ColliderType.Gap.rawValue
gap.physicsBody!.contactTestBitMask = ColliderType.Ball.rawValue
gap.physicsBody!.collisionBitMask = ColliderType.Gap.rawValue
私が持っているdidBeginContact
機能では:
func didBeginContact(contact: SKPhysicsContact) {
if contact.bodyA.categoryBitMask == ColliderType.Gap.rawValue || contact.bodyB.categoryBitMask == ColliderType.Gap.rawValue {
print("score")
score++
scoreLabel.text = String(score)
} else {
if gameOver == false {
gameOver = true
self.speed = 0
}
}
}
画面をタップすると、ボール オブジェクトが画面の半分から別の場所にジャンプし、box1 と呼ばれるオブジェクトが画面の半分に「落下」し、プレイヤーがボックスに衝突せずに通過したかどうかを検出するための「見えない」ギャップがあります。画面の残り半分です。ボールがギャップに触れたかどうかを検出して、プレーヤーが得点するか、そうでない場合はボールがボックスに衝突するかを検出したい