Alright, so I've been following various other SO links and trying to figure this out- I need to have contact detection between 2 nodes. Not collision detection, which I learned results in the nodes bouncing each other around. I don't want them to knock each other around, I just want to know when they touch.

Right now I have physics bodies for the 2 nodes, `savior` and `chicken1` as well as the ground (`ground`) upon which `savior` sits. These are all set up here:

```
        savior.physicsBody?.dynamic = true
        savior.physicsBody?.allowsRotation = false
        savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))

        chicken1.physicsBody?.dynamic = true
        chicken1.physicsBody?.allowsRotation = false
        chicken1.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(chicken1.size.width, chicken1.size.height)) 

        ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width, groundTexture.size().height*2))
        ground.physicsBody?.dynamic = false

```

I need to set up contact detection between `savior` and `chicken1`. There seem to be various ways to do this, but this is what I put together:

```
//Contact detection

        self.physicsWorld.contactDelegate = self

        savior.physicsBody?.categoryBitMask = saviorCategory
        savior.physicsBody?.contactTestBitMask = animalCategory
        savior.physicsBody?.collisionBitMask = 0

        chicken1.physicsBody?.categoryBitMask = animalCategory
        chicken1.physicsBody?.contactTestBitMask = saviorCategory
        chicken1.physicsBody?.collisionBitMask = 0

        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 {
                println("they made contact")
            }

    }

```

This code results in `savior` falling right through `ground` and going right through `chicken1`, with no contact detection because even when `savior` and `chicken1` touch, nothing happens.

I need `savior` and `ground` to continue to collide, but I don't want `savior` and `chicken1` to collide, just touch. 
The program needs to execute something when they touch.
It's a mess but how can I fix this?

EDIT:

Here is what I have, `animalCategory` has been changed to `chickenCategory` for clarity and no contact is detected. Also `savior` still falls through `ground`.

```
 self.physicsWorld.contactDelegate = self
        var screenTouches = Bool()

        let saviorCategory: UInt32 = 0x1 << 0
        let chickenCategory: UInt32 = 0x1 << 1

        savior.physicsBody?.categoryBitMask = saviorCategory
        savior.physicsBody?.contactTestBitMask = chickenCategory
        savior.physicsBody?.collisionBitMask = chickenCategory

        chicken1.physicsBody?.categoryBitMask = chickenCategory
        chicken1.physicsBody?.contactTestBitMask = saviorCategory
        chicken1.physicsBody?.collisionBitMask = saviorCategory

        func didBeginContact(contact: SKPhysicsContact) {

            var firstBody : SKPhysicsBody
            var secondBody : SKPhysicsBody

            if contact.bodyA.categoryBitMask == chickenCategory && contact.bodyB.categoryBitMask == saviorCategory {
                println("contact made")
                savior.hidden = true
            }
            else if contact.bodyA.categoryBitMask == saviorCategory && contact.bodyB.categoryBitMask == chickenCategory {
                println("contact made")
                savior.hidden = true
            }
        }

```