2014-10-05 76 views
3

我有一个设置,其中有一个空的SKSpriteNode(“玩家”),它有N个SKSpriteNode s作为子节点(正文部分,比如“臂”)。每个孩子都有这样创建的SKPhysicsBody在iOS 8的SpriteKit中用xScale翻转一个精灵并不会翻转SKPhysicsBody

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

当我试着使用

self.xScale = -1 

所有的纹理正确翻转翻转整个精灵(“播放器),但SKPhysicsBody s为不受影响。如何正确翻转整个小精灵以及它们的SKPhysicsBody

+0

很高兴我发现这一点,我一直在努力... – SomaMan 2015-11-03 21:20:45

回答

3

从水平翻转的纹理创建物理体的一种方法是使用图像编辑软件(如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) 
} 
+0

似乎还有一个核心图像过滤器可以翻转图像。但这对我的目的已经足够了,谢谢! – 2014-10-07 11:19:18

+0

谢谢 - 作品一种享受 – SomaMan 2015-11-03 21:21:04

2

缩放是一种视觉属性,它不影响物理效果。要修改节点的形状,只能创建并指定一个新的正文沙PE。

+1

谢谢,这就是我的想法。所以我想问题是如何创建一个镜像的'SKPhysicsBody'。这似乎是用物理机构翻转精灵的唯一方法。 – 2014-10-05 16:33:40