Sprite kit 如何在Spritekit中创建渐变?
有没有办法在SpriteKit中创建渐变填充框?我尝试过用它填充形状节点,但它注意到只有纯色可以使用skshapenode。我认为当前的Sprite kit 如何在Spritekit中创建渐变?,sprite-kit,Sprite Kit,有没有办法在SpriteKit中创建渐变填充框?我尝试过用它填充形状节点,但它注意到只有纯色可以使用skshapenode。我认为当前的skshapenode不可能做到这一点,它目前几乎无法处理其基本功能。如果您不想使用预先存在的sprite渐变图像,一个好方法是通过将CIFilter(在本例中可能是CILinearGradient)应用于基本长方体图像来创建SKSpriteNode,然后从SKTexture中创建SKSpriteNode 马特的答案是正确的,但我还不能添加渐变。这是我目前的尝试
skshapenode
不可能做到这一点,它目前几乎无法处理其基本功能。如果您不想使用预先存在的sprite渐变图像,一个好方法是通过将CIFilter
(在本例中可能是CILinearGradient
)应用于基本长方体图像来创建SKSpriteNode
,然后从SKTexture
中创建SKSpriteNode
马特的答案是正确的,但我还不能添加渐变。这是我目前的尝试,如果有人知道如何使它工作,请更新线程
这是你的电话号码
另一个测试过滤器的好方法是从WWDC 2013下载演示应用程序CIFunHouse。(注意,我使用的是RubyMoon,一种用于Objective C/iOS的ruby绑定,但是逻辑完全相同。如果有人想编辑它并将Objective C等效于RubyMoon,请继续
size = CGSizeMake(50,50)
scale = options[:scale] || UIScreen.mainScreen.scale
opaque = options.fetch(:opaque, false)
UIGraphicsBeginImageContextWithOptions(size, opaque, scale)
context = UIGraphicsGetCurrentContext()
gradient = CAGradientLayer.layer
gradient.frame = CGRectMake(0,0,50,50)
gradient.colors = [SKColor.blackColor.CGColor,SKColor.whiteColor.CGColor]
gradient.renderInContext(context)
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
texture = SKTexture.textureWithCGImage(image.CGImage)
node = SKSpriteNode.alloc.initWithTexture(texture)
好的,这是我现在正在使用的东西。我基于AwDogsGo2Heaven的解决方案,但是适合Mac。如果有一个完全兼容的解决方案会很好。我不确定如何创建上下文。但似乎可行。我也不确定规模。在retina Mac和非retina Mac上运行,看不到任何问题,但上下文是创建的所以,对于非视网膜Mac来说,使用scale 2可能有点过头了。我把它归入了SKTexture的一个类别 为了使用它,只需调用
+(SKTexture*)gradientWithSize:(const CGSize)SIZE colors:(NSArray*)colors
编辑:更新的代码和更多讨论:我能够创建gradient-Cagus-RadientLayer并创建UIImage上下文,在上下文上渲染该层,并从生成的UIImage创建纹理,速度很快,我没有经历任何减速(但我只需要为按钮创建一个)。我在上面添加了答案。它仍然只适用于iOS,而且这个问题不限于iOS。它在tvOS的第一行崩溃。由于未捕获的异常“NSUnknownKeyException”,终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合key-inputImage的键值编码。好的,我将尝试使用它。用法不正确。谢谢,但这对OSX:Sprite工具包不起作用。它仅限于iOS.UIGraphicsBeginImageContextWithOptions不存在。I“我正在使用RubyMoon,希望看到这段代码的ruby版本。我回来了。我发现了这个:参考这个
size = CGSizeMake(50,50)
scale = options[:scale] || UIScreen.mainScreen.scale
opaque = options.fetch(:opaque, false)
UIGraphicsBeginImageContextWithOptions(size, opaque, scale)
context = UIGraphicsGetCurrentContext()
gradient = CAGradientLayer.layer
gradient.frame = CGRectMake(0,0,50,50)
gradient.colors = [SKColor.blackColor.CGColor,SKColor.whiteColor.CGColor]
gradient.renderInContext(context)
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
texture = SKTexture.textureWithCGImage(image.CGImage)
node = SKSpriteNode.alloc.initWithTexture(texture)