在iOS 8的SpriteKit中用xScale翻转一个精灵并不会翻转SKPhysicsBody
我有一个设置,其中有一个空的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
?
从水平翻转的纹理创建物理体的一种方法是使用图像编辑软件(如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)
}
似乎还有一个核心图像过滤器可以翻转图像。但这对我的目的已经足够了,谢谢! – 2014-10-07 11:19:18
谢谢 - 作品一种享受 – SomaMan 2015-11-03 21:21:04
缩放是一种视觉属性,它不影响物理效果。要修改节点的形状,只能创建并指定一个新的正文沙PE。
谢谢,这就是我的想法。所以我想问题是如何创建一个镜像的'SKPhysicsBody'。这似乎是用物理机构翻转精灵的唯一方法。 – 2014-10-05 16:33:40
很高兴我发现这一点,我一直在努力... – SomaMan 2015-11-03 21:20:45