我在互联网上没有找到任何关于如何做到这一点。我只是试图运行一行代码时,物理身体接触。在这种情况下,我有一个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替换第一个主体和第二个主体吗?我不知道该怎么做
1条答案
按热度按时间ulydmbyx1#
我不是一个固执的人,但你不应该以“我在互联网上找不到任何东西”作为问题的开始,因为这显然不是真的。有一百万个关于碰撞检测的教程,作为SpriteKit的基础之一。
现在回答你的问题。你没有给予你的精灵一个实际的物理体,你的物理类别设置得很奇怪。把你的代码改成这样
如果你不想让你的物体掉下来,你必须关闭重力,这是默认打开的。
希望这对你有帮助