0

アプリで 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 と呼ばれるオブジェクトが画面の半分に「落下」し、プレイヤーがボックスに衝突せずに通過したかどうかを検出するための「見えない」ギャップがあります。画面の残り半分です。ボールがギャップに触れたかどうかを検出して、プレーヤーが得点するか、そうでない場合はボールがボックスに衝突するかを検出したい

4

1 に答える 1

1

これは、障害 contactTestBitMask がボールではなくオブジェクトを探しているためです。あなたはこれを求めている:box1.physicsBody!.contactTestBitMask = ColliderType.Ball.rawValue

新しい変更に照らして:

ball.physicsBody!.contactTestBitMask = ColliderType.Object.rawValue | ColliderType.Gap.rawValue

連絡先を機能させたい場合は、ギャップ値を確認する必要があります

于 2015-12-17T18:15:07.053 に答える