Swift 确定哪个精灵节点被击中

Swift 确定哪个精灵节点被击中,swift,sprite-kit,Swift,Sprite Kit,我想能够确定当用户向一组目标精灵投掷另一个精灵时,击中了哪个确切的目标精灵节点。下面是我如何在didMoveToView函数下设置我的精灵(这里只包括相关的代码行) 我假设physiccategory.Flinger小于physiccategory.Ball。然后在didcontactstart中可以使用此代码 func didBeginContact(contact: SKPhysicsContact) { var body1 : SKPhysicsBody! var bod

我想能够确定当用户向一组目标精灵投掷另一个精灵时,击中了哪个确切的目标精灵节点。下面是我如何在didMoveToView函数下设置我的精灵(这里只包括相关的代码行)


我假设
physiccategory.Flinger
小于
physiccategory.Ball
。然后在
didcontactstart
中可以使用此代码

func didBeginContact(contact: SKPhysicsContact) {

    var body1 : SKPhysicsBody!
    var body2 : SKPhysicsBody!

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
        body1 = contact.bodyA
        body2 = contact.bodyB
    }
    else  {
        body1 = contact.bodyB
        body2 = contact.bodyA
    }

    if body1.categoryBitMask == PhysicsCategory.Flinger &&
        body2.categoryBitMask == PhysicsCategory.Ball {

            if let ballNode = body2.node {

                println(ballNode.userData)
            }
    }

}

非常感谢您为我指明了正确的方向@rakeshbs!您的didBeginContact方法有效-问题是我没有正确添加用户数据。我通过在didMoveToView函数中添加以下行来解决此问题:

    ballNode.userData = ["ballNumber" : ballNode.ballIndex]

是的@rakeshbs,你的假设是正确的。但是当我尝试您建议的代码时,输出是“可选的({})”,只是为了确保我自己没有误解这个假设,如果我尝试相反的条件,输出是“nil”。我认为问题与如何为每个节点添加用户数据有关,就像在moveToView函数中调用的那样?但我不知道如何解决这个问题。
func didBeginContact(contact: SKPhysicsContact) {

    var body1 : SKPhysicsBody!
    var body2 : SKPhysicsBody!

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
        body1 = contact.bodyA
        body2 = contact.bodyB
    }
    else  {
        body1 = contact.bodyB
        body2 = contact.bodyA
    }

    if body1.categoryBitMask == PhysicsCategory.Flinger &&
        body2.categoryBitMask == PhysicsCategory.Ball {

            if let ballNode = body2.node {

                println(ballNode.userData)
            }
    }

}
if body1.categoryBitMask == PhysicsCategory.Ball &&
    body2.categoryBitMask == PhysicsCategory.Flinger {

        if let ballNode = body1.node {

            println(ballNode.userData)
        }
}
    ballNode.userData = ["ballNumber" : ballNode.ballIndex]