グラデーションを使用する場合は、画像を使用する必要はありません。これを見てください:
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をスキップし、グラデーションをプログラマチックに行うことができます。そして、確かに、私はバックグラウンドとして機能する多くのノードを残しています。それはばかげているだろう:)
ファイルの配列を作成し、それをNSDataファイルとして保存することができます。 –
これを単純にテストしたいと思うかもしれません。シーンにノードの数、1秒あたりのフレーム数を表示してコールを描画し、多数の小さいスプライトでパフォーマンスがどのように変化するかを確認します。あるいは、11.8Mbの背景画像がそれほど多くないと受け入れてください。 –
おかげでスティーブは、ええ、私は、1334スプライトを持つことは良いアイデアではないことを知っていた私は(基本的には、実行時に新しい.pngのファイルを作成する)1にそれらのすべての画像を変換する方法だろうが期待していた理由thatsの。 – Jarron