1

I want a sprite to delete itself when touching another sprite. Right now when they touch, they just push each other.

I have this:

let alphaCategory: UInt32 = 0x1 << 0
let betaCategory: UInt32 = 0x1 << 1

I made the sprites dynamic and not affected by gravity

self.physicsworld.contactDelegate = self

alpha.physicsBody?.categoryBitMask = alphaCategory
alpha.physicsBody?.contactTestBitmask = betaCategory

and

beta.physicsBody?.categoryBitMask = betaCategory
beta.physicsBody?.contactTestBitmask = alphaCategory

I couldn't find anything in swift that made sense to me, but I think the problem is here

func didBeginContact(contact: SKPhysicsContact) {

    var firstBody: SKPhysicsBody
    var secondBody: SKPhysicsBody

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
        firstBody = contact.bodyA
        secondBody = contact.BodyB
        beta.removeFromParent()
    }
}
0x141E
  • 12,613
  • 2
  • 41
  • 54
wanksta11
  • 59
  • 4
  • 9

3 Answers3

1

First you should set your firstBody & secondBody to the order of their collisionBitMask:

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 {
      secondBody.removeFromParent()
}

This will prevent your sprites from colliding with anything (including each other). Set this where you set the other BitMask properties:

alpha.physicsBody.collisionBitMask = 0
beta.physicsBody.collisionBitMask = 0
meisenman
  • 1,818
  • 1
  • 15
  • 25
  • Reference the following tutorial which has a section dedicated to contact events. It does exactly what you are looking for... when two objects collide it removes one of them. I personally prefer how the tutorial handles it. I just included the logic. http://www.raywenderlich.com/42699/spritekit-tutorial-for-beginners – meisenman Oct 09 '14 at 19:05
  • Thanks, the collisionBitMask is very nice! – wanksta11 Oct 09 '14 at 19:13
  • Yeah I saw that tutorial but I thought it wouldn't work in swift. – wanksta11 Oct 09 '14 at 19:14
1

This will actually cause problems as I found out last summer when working on a SpritKit game. If you modify the scene's node structure during any of the SKPhysicsContact callbacks the results are undefined according to Apple. What I was told after filing a bug on this was that you should never modify the scene Node structure from inside any of those callbacks. Instead, Apple says to simply set a flag and then deal with the scene modification in your update loop where it's safe.

BGreenstone
  • 260
  • 1
  • 11
0

Try:

secondBody = contact.bodyB
rink.attendant.6
  • 44,500
  • 61
  • 101
  • 156
mdz
  • 1