2017-06-04 40 views
2

在我测试的应用程序中,我使用渐变图像作为背景(大小为590kb)。我有能力将这个图像分成0.5像素的垂直条(19kb),并让这个图像重复其自身(1334次)以创建相同的较大背景图像。我总共有20个不同的背景图片,因此该应用程序的存储使用量将为11.8mb,而380kb。将多个Sprite图片转换为一个

我不喜欢有1334个精灵的想法,但我确实喜欢使用较少存储的想法。那么,有没有办法将1334张图片平铺成一个精灵?不知道这是否有意义,但任何推动正确的方向将不胜感激。

+1

您可以创建一个文件数组并将其保存为一个NSData文件。 –

+1

你可能只想简单地测试一下。让您的场景显示节点的数量,每秒帧数并绘制调用并查看性能如何随着大量小精灵而不是大大小精灵的变化而变化。另外,只要接受11.8Mb的背景图像并不是那么重要。 –

+0

谢谢史蒂夫,是的,我知道有1334精灵不是一个好主意,这就是为什么我希望有一种方式将所有这些图像转换成一个(基本上在运行时创建一个新的.png文件)。 – Jarron

回答

2

如果您想要渐变,则不必使用图像。看一看此:

let context = CIContext() 
     if let filter = CIFilter(name: "CILinearGradient") 
     { 
      filter.setDefaults() 

      let startColor = CIColor(color: .gray) 
      let endColor = CIColor(color: .purple) 
      let startVector = CIVector(x: frame.width, y: 0) 
      let endVector = CIVector(x: frame.width, y: frame.height) 

      filter.setValue(startVector, forKey: "inputPoint0") 
      filter.setValue(endVector, forKey: "inputPoint1") 
      filter.setValue(startColor, forKey: "inputColor0") 
      filter.setValue(endColor, forKey: "inputColor1") 


      if let outputImage = filter.outputImage { 

       if let croppedImage = context.createCGImage(outputImage, from: CGRect(origin: CGPoint.zero, size: frame.size)){ 

        let background = SKSpriteNode(texture: SKTexture(cgImage: croppedImage)) 

        addChild(background) 
        background.zPosition = -20 

       } 

      } 

     } 

水平或垂直重复图像,以达到相同的效果是可能的。这将需要使用类似this的容器节点创建纹理。尽管如此,国际海事组织,你可能想跳过这一点,并以编程方式做梯度。当然,我会远离有许多节点作为背景。这将是愚蠢的:)

+0

感谢旋风!我昨天花了几个小时试图找出如何以编程方式创建渐变效果并将其用作精灵的纹理。我昨天在网上阅读的所有内容看起来都非常复杂,但是您提供的内容很容易理解,并且像一种享受。 – Jarron

+0

@Jarron不客气;) – Whirlwind