I ran into an odd SpriteKit bug the other day when preloading and caching my texture atlases. It seems that you cannot create more than one SKPhysicsBody from a single instance of a texture, or all subsequent physics bodies will be created upside down. This StackOverflow thread suggests it’s an issue with internally cached textures.
It may be possible to avoid this by creating a new instance of your texture atlas in memory each time you need to create a physics body from a texture. I don’t want to do this, so I decided to draw a path for my penguin’s physics body instead:
let path = CGPathCreateMutable() CGPathMoveToPoint(path, nil, 12, 21) CGPathAddLineToPoint(path, nil, -27, -3) CGPathAddLineToPoint(path, nil, -12, -16) CGPathAddLineToPoint(path, nil, 24, 8) CGPathCloseSubpath(path) self.physicsBody = SKPhysicsBody(polygonFromPath: path)
This gives a passable result. It’s too bad that the texture based physics body suffers from this bug, since it’s otherwise so useful. Perhaps it will be fixed in Swift 2.