我试图联系,但它没有用。
我创建了一个枚举:
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
我希望气球飞过差距得分但不能。气球只是接触间隙并卡在那里,如图所示。
任何人都可以帮助我,我真的需要"如何使用Enum教程"
答案 0 :(得分:0)
正如我在评论中所提到的,你的位掩码值并没有多大意义。有点像这样的事情(我没有检查过拼写错误):
enum MaskType : UInt32 {
case Balloon = 1
case Gap = 2
case Wall = 4
case None = 0
}
然后你需要决定你追求的是什么。以下示例不会记录冲突,这意味着您希望在对象之间进行物理交互。
balloon.physicsBody?.categoryBitMask = MaskType.Balloon.rawValue
balloon.physicsBody?.collisionBitMask = MaskType.None.rawValue
balloon.physicsBody?.contactTestBitMask = MaskType.Gap.rawValue | MaskType.Wall.rawValue
气球精灵现在将注册具有.Gap或.Wall值作为其categoryBitMask的对象的联系人。
如果您现在正确设置了其他spriteNode的physicsBodies,您可以在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
}