Upside Down SKPhysicsBody when Loaded From Texture
By Stephen Haney on 2015-07-27
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.