Swift 需要了解SpriteKit中联系人的枚举

Swift 需要了解SpriteKit中联系人的枚举,swift,enums,sprite-kit,Swift,Enums,Sprite Kit,我试着联系,但没有成功 我创建一个枚举: enum object:UInt32{ case BB = 1 case TR = 2 case GAP = 3 } 然后我有3个节点: balloon.physicsBody?.categoryBitMask = object.BB.rawValue balloon.physicsBody?.contactTestBitMask = object.TR.rawValue balloon.physicsBody?.collisi

我试着联系,但没有成功

我创建一个枚举:

enum object:UInt32{
    case BB = 1
    case TR = 2
    case GAP = 3
}
然后我有3个节点:

balloon.physicsBody?.categoryBitMask = object.BB.rawValue
balloon.physicsBody?.contactTestBitMask = object.TR.rawValue
balloon.physicsBody?.collisionBitMask = object.GAP.rawValue

tree2.physicsBody?.categoryBitMask = object.TR.rawValue
tree2.physicsBody?.contactTestBitMask = object.BB.rawValue

gap.physicsBody?.categoryBitMask = object.GAP.rawValue
gap.physicsBody?.collisionBitMask = object.GAP.rawValue
gap.physicsBody?.contactTestBitMask = object.BB.rawValue
在DidBeginContact中:

let result = contact.bodyA.categoryBitMask + contact.bodyB.categoryBitMask

switch result{
    case object.BB.rawValue + object.TR.rawValue:
        xoaBB(contact.bodyA.node as! SKSpriteNode, TR: contact.bodyB.node as! SKSpriteNode, toaDo: contact.contactPoint)

    case object.BB.rawValue + object.GAP.rawValue:
        score++
        scorelabel.text = "\(score)"

    default:
        return
    }
问题是:

"case object.BB.rawValue + object.GAP.rawValue" didn't work 
我想让气球飞过缺口得分,但它不能。气球刚好接触到缝隙并卡在那个里,如图所示


有人能帮我吗,我真的需要“如何使用枚举教程”

正如我在评论中提到的,您的位掩码值没有太大意义。这样一点怎么样(我没有检查打字错误):

然后你需要决定你想要什么。以下示例未注册碰撞,这意味着您希望在对象之间发生物理交互

balloon.physicsBody?.categoryBitMask = MaskType.Balloon.rawValue
balloon.physicsBody?.collisionBitMask = MaskType.None.rawValue
balloon.physicsBody?.contactTestBitMask = MaskType.Gap.rawValue | MaskType.Wall.rawValue
气球精灵现在将注册与对象的接触,对象的categoryBitMask值为.Gap或.Wall

如果您现在适当地设置了其他SpritEndode的PhysicsBody,您可以在
didBeginContact
函数中做一些不错的事情。也许是这样的:

func didBeginContact(contact: SKPhysicsContact) {
    let contactA = contact.bodyA
    let contactB = contact.bodyB

    func ballonHitType() -> Uint32 {
       if contactA.categoryBitMask == MaskType.Baloon.rawValue {
           return contactB.categoryBitMask
       } else {
           return contactA.categoryBitMask
       }
    }

    // Then simply perform your wanted actions based on whatever ballonHitType you receive
}

首先要考虑的事实是,位掩码是好的口罩。值1、2和3没有意义,因为前两个值之和等于第三个值。值应为1、2、4、8等。
func didBeginContact(contact: SKPhysicsContact) {
    let contactA = contact.bodyA
    let contactB = contact.bodyB

    func ballonHitType() -> Uint32 {
       if contactA.categoryBitMask == MaskType.Baloon.rawValue {
           return contactB.categoryBitMask
       } else {
           return contactA.categoryBitMask
       }
    }

    // Then simply perform your wanted actions based on whatever ballonHitType you receive
}