将多个精灵图像转换为一个

时间:2017-06-04 04:08:15

标签: swift image sprite-kit sprite

在我正在测试的应用程序中,我使用渐变图像作为背景(大小为590kb)。我有能力将这个图像分成0.5像素垂直条(19kb)并让这个图像重复自身(1334次)来创建相同的更大的背景图像。我有20个不同的背景图像,所以应用程序将是11.8mb与380kb的存储空间。

我不喜欢拥有1334个精灵的想法,但我确实喜欢使用更少的存储空间。那么,有没有办法将1334图像平铺成一个精灵?不确定这是否有意义,但任何正确方向的推动都会受到赞赏。

1 个答案:

答案 0 :(得分: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之类的东西从容器节点创建纹理。仍然,IMO,你可能想跳过它并以编程方式进行渐变。当然,我会远离拥有许多作为背景的节点。那太傻了:))