在iOS 8的SpriteKit中使用xScale翻转精灵不会';不要翻转身体

在iOS 8的SpriteKit中使用xScale翻转精灵不会';不要翻转身体,ios,swift,ios8,sprite-kit,Ios,Swift,Ios8,Sprite Kit,我有一个设置,其中有一个空的SKSpriteNode(“播放器”),其中有N个SKSpriteNodes作为儿童(身体部位,如“手臂”)。每个孩子都有这样创建的SKPhysicsBody: sprite.physicsBody = SKPhysicsBody(texture: sprite.texture, size: sprite.texture!.size()) 当我试图翻转整个精灵(“玩家”)时 所有纹理都已正确翻转,但SKPhysicsBodys不受影响。如何使用所有子对象及其SKPh

我有一个设置,其中有一个空的
SKSpriteNode
(“播放器”),其中有N个
SKSpriteNode
s作为儿童(身体部位,如“手臂”)。每个孩子都有这样创建的
SKPhysicsBody

sprite.physicsBody = SKPhysicsBody(texture: sprite.texture, size: sprite.texture!.size())
当我试图翻转整个精灵(“玩家”)时


所有纹理都已正确翻转,但
SKPhysicsBody
s不受影响。如何使用所有子对象及其
SKPhysicsBody
s正确翻转整个精灵?

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

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

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)
}

谢谢,这就是我的想法。所以问题是,我想,如何创建镜像的
SKPhysicsBody
。这似乎是用物理体翻转精灵的唯一方法。似乎还有一个可以翻转图像的核心图像过滤器。但这就够了,谢谢!在没有平滑动画的情况下翻转那里。这突然发生了我们能在这里做到吗很高兴我找到了这个,我一直在努力。。。
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)
}