将多个精灵图像转换为一个
Converting Multiple Sprite Images into One
在我正在测试的应用程序中,我使用渐变图像作为背景(大小为 590kb)。我有能力将此图像分解为 0.5 像素的垂直条带 (19kb) 并让此图像自身重复(1334 次)以创建相同的更大背景图像。我总共有 20 张不同的背景图片,因此应用程序的存储使用量为 11.8mb vs 380kb。
我不喜欢拥有 1334 个精灵的想法,但我喜欢使用更少存储空间的想法。那么,有没有办法将 1334 张图像拼合成一个精灵?不确定这是否有意义,但任何朝着正确方向的推动都会受到赞赏。
如果你想有一个渐变,你根本不必使用图像。看看这个:
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,您可能希望跳过它并以编程方式进行渐变。当然,我会避免让许多节点充当背景。那将是愚蠢的:)
在我正在测试的应用程序中,我使用渐变图像作为背景(大小为 590kb)。我有能力将此图像分解为 0.5 像素的垂直条带 (19kb) 并让此图像自身重复(1334 次)以创建相同的更大背景图像。我总共有 20 张不同的背景图片,因此应用程序的存储使用量为 11.8mb vs 380kb。
我不喜欢拥有 1334 个精灵的想法,但我喜欢使用更少存储空间的想法。那么,有没有办法将 1334 张图像拼合成一个精灵?不确定这是否有意义,但任何朝着正确方向的推动都会受到赞赏。
如果你想有一个渐变,你根本不必使用图像。看看这个:
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,您可能希望跳过它并以编程方式进行渐变。当然,我会避免让许多节点充当背景。那将是愚蠢的:)