didBeginContact没有被调用:这个实例对我来说是独一无二的

时间:2015-05-13 20:57:00

标签: swift sprite-kit

所以,我第一次尝试使用Sprite Kit,我想测试碰撞。所以,我在Apple的文档中,围绕Stack Overflow,在线教程和其他论坛进行了一些搜索。但是,我无法找到一些提示或代码使我正在做的工作。所以,这里是相关的代码片段:

这是障碍的代码:

func createObstacle(){

    var ball = SKShapeNode(circleOfRadius: 20)
    var width = UInt32(self.frame.width)
    var random_number = arc4random_uniform(width)
    ball.position = CGPointMake(CGFloat(random_number), frame.height+20)
    ball.strokeColor = SKColor.blackColor()
    ball.glowWidth = 1.0
    ball.fillColor = SKColor.darkGrayColor()
    ball.physicsBody = SKPhysicsBody(circleOfRadius: 20)
    ball.physicsBody!.affectedByGravity = true
    ball.physicsBody?.categoryBitMask = 6
    ball.physicsBody?.dynamic = true
    self.addChild(ball)
}

这是与之相冲突的相关代码:

    let circle = SKShapeNode(circleOfRadius: 20)
    circle.physicsBody = SKPhysicsBody(circleOfRadius: 20)
    circle.fillColor = SKColor.blueColor()
    circle.strokeColor = SKColor.blueColor()
    circle.glowWidth = 1.0
    circle.physicsBody?.categoryBitMask = 4
    circle.physicsBody?.dynamic = true
    circle.physicsBody?.affectedByGravity = false

这是联系代码:

func didBeginContact(contact: SKPhysicsContact) {
    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 == 4 && secondBody.categoryBitMask == 6) || (firstBody.categoryBitMask == 6 && secondBody.categoryBitMask == 4)){

        println("HI")
    }else{println("NO")}

}
可悲的是,根本没有印刷任何东西,所以有些不对劲。知道为什么这不起作用吗?

1 个答案:

答案 0 :(得分:0)

您的班级应该有代理人SKPhysicsContactDelegate

class GameScene: SKScene, SKPhysicsContactDelegate { 

didMoveToView中写下这个:

    physicsWorld.contactDelegate = self

修改

像这样定义CategoryBitMask

struct PhysicsCategory {

    static let circleCategory   : UInt32 = 0b1       // 1
    static let ballCategory     : UInt32 = 0b10      // 2
}

CategoryBitMask圈数和球

circle.physicsBody?.categoryBitMask = PhysicsCategory.circleCategory
ball.physicsBody?.categoryBitMask = PhysicsCategory.ballCategory

然后检查这样的联系方式:

(func didBeginContact(contact: SKPhysicsContact) {

    if ((contact.bodyA.categoryBitMask == 0b1 && contact.bodyB.categoryBitMask == 0b10 ) || ( contact.bodyA.categoryBitMask == 0b1 && contact.BodyB.categoryBitMask == 0b1 ))
        println("Contact")
    }
}
  

很抱歉打字错误没有使用编辑器