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.
Questions or ideas:
Discuss this post on GitHub