2017-01-19 4 views
1

В настоящее время я создаю градиент, используя CIFilter. Код:SpriteKit - Создание изменяющихся градиентов

//In update function 

let context = CIContext(options: nil) 
let filter = CIFilter(name: "CILinearGradient") 
let startVector = CIVector(x: size.width * 0.5, y: 0) 
let endVector = CIVector(x: size.width * 0.5, y: size.height) 
let color1 = CIColor(red: red1/255, green: green1/255, blue: blue1/255, alpha: 1) 
let color2 = CIColor(red: red2/255, green: green2/255, blue: blue2/255, alpha: 1) 

//Here I would change all rgb values by +- 0.2 - 0.5 

filter!.setDefaults() 

filter!.setValue(startVector, forKey: "inputPoint0") 
filter!.setValue(endVector, forKey: "inputPoint1") 
filter!.setValue(color1, forKey: "inputColor0") 
filter!.setValue(color2, forKey: "inputColor1") 

let image = context.createCGImage(filter!.outputImage!, from: CGRect(x: 0, y: 0, width: size.width, height: size.height)) 
let texture = SKTexture(image: UIImage(cgImage: image!)) 
backgroundImage.texture = texture 

Моя цель - создать фоновый градиент, который меняет цвет. Когда я попытался сделать это с помощью CIFilter, это сработало, но мой процессор подскочил до 100%, намного выше, чем мои обычные 20%.

Есть ли другой способ для этого?

Заранее спасибо

Если цвет градиентов необходимы:

Start Destination

+0

Там несколько способов, чтобы сделать это гораздо более эффективно, но каждый из них имеет свои ограничения. Есть ли способ показать типы градиентов, которые вы хотите сделать, и как вы хотите, чтобы они переходили от одного к другому? – Confused

+0

@Confused Я просто хочу сделать линейный градиент сверху вниз, который меняет цвет (верхняя часть может идти от красного к зеленому, а нижнее - от синего до желтого, создавая изменяющийся градиент.) –

+0

Снова, извините, мне нужно посмотрите, что вы считаете первым градиентом, и градиентом назначения. Я не могу помочь без визуальной точности этих вещей. Есть много способов сделать градиенты, и есть еще много типов градиентов. – Confused

ответ

Смежные вопросы