如何检测两个对象何时在SpriteKit中触摸

时间:2016-03-26 23:46:53

标签: swift sprite-kit

我在互联网上没有发现如何做到这一点。我只是试图在物理身体触摸时运行一行代码。在这种情况下,我有一个带有物理主体的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替换第一个身体和第二个身体吗?我不知道该怎么做

1 个答案:

答案 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

希望这有帮助