在iOS 8中在SpriteKit中使用xScale翻转精灵并不能翻转SKPhysicsBody

时间:2014-10-05 16:22:07

标签: ios swift ios8 sprite-kit

我有一个设置,其中有一个空SKSpriteNode("播放器"),其中有N个SKSpriteNode s作为孩子(身体部位,例如"臂&#34)。每个孩子都有SKPhysicsBody这样创建:

sprite.physicsBody = SKPhysicsBody(texture: sprite.texture, size: sprite.texture!.size())

当我尝试用

翻转整个精灵("播放器)时
self.xScale = -1

所有纹理都正确翻转,但SKPhysicsBody不受影响。如何将所有孩子及其SKPhysicsBody正确翻转整个精灵?

2 个答案:

答案 0 :(得分:3)

从水平翻转的纹理创建physicsBody的一种方法是使用图像编辑软件(如Photoshop)创建输入图像的翻转版本。另一种方法是使用核心图形翻转原始图像。以下是如何执行此操作的示例:

func flippedTextureWithImageNamed(name:NSString) -> SKTexture
{
    let image = UIImage(named:name)

    UIGraphicsBeginImageContext(image.size);
    let context = UIGraphicsGetCurrentContext()

    CGContextTranslateCTM(context, image.size.width, image.size.height)
    CGContextScaleCTM(context, -1.0, -1.0)

    CGContextDrawImage(context, CGRectMake(0.0, 0.0, image.size.width, image.size.height), image.CGImage)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext();

    return SKTexture(image: newImage)
}

答案 1 :(得分:2)

缩放是一种视觉属性,它不会影响物理。要修改节点的形状,您只能创建并指定一个具有新形状的新主体。