swift - 将多个 Sprite 图像转换为一张

标签 swift image sprite-kit sprite

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

我不喜欢拥有 1334 个 Sprite 的想法,但我确实喜欢使用更少存储空间的想法。那么,有没有一种方法可以将 1334 张图像扁平化为一个 Sprite 呢?不确定这是否有意义,但任何朝正确方向的插入将不胜感激。

最佳答案

如果你想要渐变,你根本不必使用图像。看看这个:

 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 之类的东西从容器节点创建纹理。 。不过,在我看来,您可能想跳过它并以编程方式进行渐变。当然,我会避免使用许多节点作为背景。那是愚蠢的:)

关于swift - 将多个 Sprite 图像转换为一张,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44350680/

相关文章:

ios - Tilemap 地板不显示在背景图片之前

ios - 创建许多使用一个函数更新相关标签的 UISlider

ios - 在 iOS 中设置时区的正确格式是什么?

ios - Swift 4 中模板图像的渐变颜色

ios - 获取 CoreData 中保存的 NSData 的 URL

image - scipy.misc 图像函数(例如 imread、imresize、imsave、imshow 等)上的 AttributeError、ImportError

image - 如何为视频生成图像序列

javascript - Jquery slider 的行为与文档中的示例不同

swift - SpriteKit 中的摩擦力

objective-c - Objective C 中的 Sprite.Frame.Contains 吗?