Horizontally mirror a SKSpriteNode texture
If you're just trying to flip the sprite along an axis, you can do something like this:
sprite.xScale = -1.0;
You can use this code to flip among x-axis:
spriteNode.xScale = spriteNode.xScale * -1;
but be careful you can lose some of physicsbody's property, I highly suggest u to use xScale in this way:
spriteNodeBody = [SKNode node];spriteNodeBody.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:spriteNode.size];spriteNodeBody.physicsBody.categoryBitMask = CNPhysicsCategoryPlayer;spriteNodeBody.physicsBody.collisionBitMask = CNPhysicsCategoryBall;[spriteNodeBody addChild:spriteNode];[self addChild:spriteNodeBody];
And now you can safely use:
spriteNode.xScale = spriteNode.xScale * -1;
I use this for my rightHanded or leftHanded sprites:
with some help from hereHorizontal Flip of a frame in Objective-C
BOOL leftHanded = YES;SKSpriteNode *sprite;if (leftHanded) { //my textures point east, so I flip vertically SKTexture *texture = [SKTexture textureWithImageNamed:@"figure-step0"]; CIFilter *filter = [CIFilter filterWithName:@"CIAffineTransform"]; [filter setValue:[CIImage imageWithCGImage:[texture CGImage]] forKey:kCIInputImageKey];#ifdef IOS_BLOCK //set these up with defines CGAffineTransform flipTransform = CGAffineTransformMakeScale(1.0f, -1.0f); // vert [filter setValue:[NSValue valueWithBytes:&flipTransform objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"];#else //OSX_BLOCK NSAffineTransform* flipTransform = [NSAffineTransform transform]; [flipTransform scaleXBy:1.0f yBy: -1.0f]; // vert [filter setValue:flipTransform forKey:@"inputTransform"];#endif sprite = [SKSpriteNode spriteNodeWithTexture: [texture textureByApplyingCIFilter:filter]];} else { sprite = [SKSpriteNode spriteNodeWithImageNamed:@"figure-step0"];}
You can do the same for animation frames likewise. Works for iOS or OS X.