我在互联网上没有发现如何做到这一点。我只是试图在物理身体触摸时运行一行代码。在这种情况下,我有一个带有物理主体的SKSpriteNode和另一个用于地面的SKSpriteNode。当他们触摸它时应该运行代码行,这是我到目前为止所发现的。
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")
}
}
这就是我困惑的地方
0
我应该用catGroup和groundGroup替换第一个身体和第二个身体吗?我不知道该怎么做
答案 0 :(得分:1)
不要成为一个坚持者,但你不应该用&#34开始提问;我在网上找不到任何东西&#34;当那些公然不真实。作为SpriteKit的基础之一,有一百万个关于碰撞检测的教程。
现在回答你的问题。你没有给你的精灵一个实际的物理身体,你的物理类别设置很奇怪。将您的代码更改为此
struct PhysicsCategory {
static let cat:UInt32 = 0x1 << 0
static let ground:UInt32 = 0x1 << 1
}
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMoveToView(view: SKView) {
/* Setup your scene here */
physicsWorld.contactDelegate = self
cat.physicsBody = SKPhysicsBody(rectangleOfSize: cat.size) // FORGOT THIS
cat.physicsBody?.categoryBitMask = PhysicsCategory.cat
cat.physicsBody?.contactTestBitMask = PhysicsCategory.ground
ground.physicsBody = SKPhysicsBody(rectangleOfSize: ground.size) // FORGOT THIS
ground.physicsBody?.categoryBitMask = PhysicsCategory.ground
ground.physicsBody?.contactTestBitMask = PhysicsCategory.cat // You dont really need this line as long as you have set it on the other body.
}
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 == PhysicsCategory.cat && secondBody.categoryBitMask == PhysicsCategory.ground {
print("contact")
}
}
}
如果您不希望物体掉落,则必须关闭重力,默认情况下会启用。
cat.physicsBody?.affectedByGravity = false
ground.physicsBody?.affectedByGravity = false
希望这有帮助