【问题标题】:Converting Multiple Sprite Images into One将多个 Sprite 图像转换为一个
【发布时间】:2017-06-04 04:08:15
【问题描述】:

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

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

【问题讨论】:

  • 您可以创建一个文件数组并将其保存为 NSData 文件。
  • 你可能想简单地测试一下。让您的场景显示节点数、每秒帧数和绘制调用,并查看性能如何随许多小精灵与较少的较大精灵而变化。或者,接受 11.8Mb 的背景图片并不算多。
  • 谢谢史蒂夫,是的,我知道拥有 1334 个精灵不是一个好主意,这就是为什么我希望有一种方法可以将所有这些图像转换为一个(基本上是在运行时间)。

标签: swift image sprite-kit sprite


【解决方案1】:

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

 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,您可能希望跳过它并以编程方式进行渐变。当然,我会远离有许多节点作为背景。那会很愚蠢:)

【讨论】:

  • 感谢旋风!我昨天花了几个小时试图弄清楚如何以编程方式创建渐变效果并将其用作精灵的纹理。我昨天在网上阅读的所有内容似乎都很复杂,但您提供的内容很容易理解,而且效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 2015-03-10
  • 2010-10-15
  • 2020-12-19
相关资源
最近更新 更多