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