【发布时间】:2016-04-03 04:28:50
【问题描述】:
我在互联网上没有找到任何关于如何执行此操作的信息。我只是想在物理身体触摸时运行一行代码。在这种情况下,我有一个带有物理主体的 SKSpriteNode 和另一个用于地面的 SKSpriteNode。当他们触摸它时,它应该运行代码行,这就是我到目前为止所发现的全部。
let catGroup:UInt32 = 0x1 << 0
let groundGroup:UInt32 = 0x2 << 1
cat.physicsBody?.categoryBitMask = catGroup
cat.physicsBody?.contactTestBitMask = groundGroup
ground.physicsBody?.categoryBitMask = groundGroup
ground.physicsBody?.contactTestBitMask = catGroup
这就是我困惑的地方
func didBeginContact(contact: SKPhysicsContact) {
var firstBody: SKPhysicsBody
var secondBody: SKPhysicsBody
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask
{
firstBody = contact.bodyA
secondBody = contact.bodyB
}
else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}
if firstBody.categoryBitMask==0 && secondBody.categoryBitMask==1 {
print("contact")
}
}
所以我应该用 catGroup 和 groundGroup 替换第一个主体和第二个主体吗?我不知道该怎么做
【问题讨论】:
-
你是否设置了你有 didBeginContact 的类必须到 Physivs Contact Delegate 协议并且你设置了'delegate'属性?之后,在你的 dudBeginContact 中放置一个 print("Contact detected") 以查看它是否被调用(或者更准确地说,设置一个断点)。
-
您还不能替换 firstBody 和 secondBody,因为您需要检查它们的 categoryBitMask 以找出哪个是猫,哪个是地面。
标签: swift sprite-kit