Swift SpriteKit联系检测检查失败(无论categoryBitMask如何都始终命中)

时间:2018-04-04 07:31:11

标签: swift collision-detection detection

我尝试让对象在屏幕上向下移动,分为两类。在底部,我有2辆汽车(左和右),如果物体撞到汽车1是“碰撞”而另一个是“旋转器”,将汽车旋转.... 对象设置具有随机的“碰撞”和“旋转器”对象....

现在只检测“微调器”对象,因为我还没有添加“碰撞”。 我的问题是所有都被对待,所以旋转器和碰撞对象得到“撞到右边的车!/撞到左边的车!”在我的控制台中。 “击中左树!/”击中右树!“永远不会触发。

代码:

func didBegin(_ contact: SKPhysicsContact) {

    if enableContact == true {

        var firstBody = SKPhysicsBody()
        var secondBody = SKPhysicsBody()

        if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {

            firstBody = contact.bodyA
            secondBody = contact.bodyB
        }
        else {

            firstBody = contact.bodyB
            secondBody = contact.bodyA
        }

        if (firstBody.categoryBitMask & PC.L_CAR) != 0 && (secondBody.categoryBitMask & PC.L_COLLIDER) != 0  {

            print ("Hit left car!")
        }
        else if (firstBody.categoryBitMask & PC.R_CAR) != 0 && (secondBody.categoryBitMask & PC.R_COLLIDER) != 0  {

            print ("Hit right car!")
        }
        else if (firstBody.categoryBitMask & PC.L_CAR) != 0 && (secondBody.categoryBitMask & PC.L_SPINNER) != 0 {

            print("Hit left tree!")
        }
        else if (firstBody.categoryBitMask & PC.R_CAR) != 0 && (secondBody.categoryBitMask & PC.R_SPINNER) != 0 {

            print("Hit right tree!")
        }
    }}

汽车设置:

func setUp(){

    canMove = true

    leftCar = self.childNode(withName: "leftCar") as! SKSpriteNode
    rightCar = self.childNode(withName: "rightCar") as! SKSpriteNode

    centerPoint = self.frame.size.width / self.frame.size.height

    leftCar.physicsBody?.isDynamic = true
    leftCar.physicsBody?.categoryBitMask = PC.L_CAR
    leftCar.physicsBody?.contactTestBitMask = PC.L_SPINNER
    leftCar.physicsBody?.collisionBitMask = 0

    rightCar.physicsBody?.isDynamic = true
    rightCar.physicsBody?.categoryBitMask = PC.R_CAR
    rightCar.physicsBody?.contactTestBitMask = PC.R_SPINNER
    rightCar.physicsBody?.collisionBitMask = 0

对象设置:

@objc func leftTraffic() {

    if !stopEverything {
        let leftTrafficItem : SKSpriteNode!
        let randonNumber = Helper().randomBetweenTwoNumbers(firstNumber: 1, secondNumber: 13)
        switch Int(randonNumber) {
        case 1...4:
            leftTrafficItem = SKSpriteNode(imageNamed: "orangeCar")
            leftTrafficItem.name = "orangeCar"
            leftTrafficItem.physicsBody?.categoryBitMask = PC.L_COLLIDER
            break
        case 5...8:
            leftTrafficItem = SKSpriteNode(imageNamed: "greenCar")
            leftTrafficItem.name = "greenCar"
            leftTrafficItem.physicsBody?.categoryBitMask = PC.L_COLLIDER
            break
        case 9...11:
            leftTrafficItem = SKSpriteNode(imageNamed: "rock")
            leftTrafficItem.name = "rock"
            leftTrafficItem.physicsBody?.categoryBitMask = PC.L_COLLIDER
            break
        case 12...13:
            leftTrafficItem = SKSpriteNode(imageNamed: "tree")
            leftTrafficItem.name = "tree"
            leftTrafficItem.physicsBody?.categoryBitMask = PC.L_SPINNER
            break
        default:
            leftTrafficItem = SKSpriteNode(imageNamed: "orangCar")
            leftTrafficItem.name = "orangeCar"
            leftTrafficItem.physicsBody?.categoryBitMask = PC.L_COLLIDER
        }
        leftTrafficItem.anchorPoint = CGPoint(x: 0.5, y: 0.5)
        leftTrafficItem.zPosition = 10
        let randomNum = Helper().randomBetweenTwoNumbers(firstNumber: 1, secondNumber: 10)
        switch Int(randomNum) {
        case 1...4:
            leftTrafficItem.position.x = -280
            break
        case 5...10:
            leftTrafficItem.position.x = -100
            break
        default:
            leftTrafficItem.position.x = -280
        }
        leftTrafficItem.position.y = 700
        leftTrafficItem.physicsBody = SKPhysicsBody(texture: leftTrafficItem.texture!, size: (leftTrafficItem.texture?.size())!)
        leftTrafficItem.physicsBody?.isDynamic = true
        leftTrafficItem.physicsBody?.contactTestBitMask = 0
        leftTrafficItem.physicsBody?.collisionBitMask = 0
        leftTrafficItem.physicsBody?.affectedByGravity = false
        addChild(leftTrafficItem)
    }
}

0 个答案:

没有答案