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
}