问题描述
尝试在 Swift 中为 Sprite 添加纹理。
找到了这个解决方案,看起来不错。
https://maximbilan.medium.com/sprite-kit-gradient-1ffb7ec35c6a
写于 2016 年,所以从那时起不得不修复一些语法更改,但卡在最后一行。
public enum GradientDirection {
case Up
case Left
case UpLeft
case UpRight
}
public extension SKTexture {
convenience init(size: CGSize,color1: CIColor,color2: CIColor,direction: GradientDirection = .Up) {
let context = CIContext(options: nil)
let filter = CIFilter(name: "CILinearGradient")
var startVector: CIVector
var endVector: CIVector
filter!.setDefaults()
switch direction {
case .Up:
startVector = CIVector(x: size.width * 0.5,y: 0)
endVector = CIVector(x: size.width * 0.5,y: size.height)
case .Left:
startVector = CIVector(x: size.width,y: size.height * 0.5)
endVector = CIVector(x: 0,y: size.height * 0.5)
case .UpLeft:
startVector = CIVector(x: size.width,y: 0)
endVector = CIVector(x: 0,y: size.height)
case .UpRight:
startVector = CIVector(x: 0,y: 0)
endVector = CIVector(x: size.width,y: size.height)
}
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))!
self(cgImage: image) <- Syntax here wrong??
}
}
self(cgImage: image) 行的语法错误。
你像这样使用它(语法需要从 2016 年开始更新)。
let topColor = CIColor(rgba: "#71B280")
let bottomColor = CIColor(rgba: "#134E5E")
let texture = SKTexture(size: CGSizeMake(200,200),color1: topColor,color2: bottomColor,direction: GradientDirection.Up)
texture.filteringMode = .Nearest
let sprite = SKSpriteNode(texture: texture)
sprite.position = CGPointMake(CGRectGetMidX(frame),CGRectGetMidY(frame))
sprite.size = self.frame.size
addChild(sprite)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)