Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sprite kit 如何在Spritekit中创建渐变?_Sprite Kit - Fatal编程技术网

Sprite kit 如何在Spritekit中创建渐变?

Sprite kit 如何在Spritekit中创建渐变?,sprite-kit,Sprite Kit,有没有办法在SpriteKit中创建渐变填充框?我尝试过用它填充形状节点,但它注意到只有纯色可以使用skshapenode。我认为当前的skshapenode不可能做到这一点,它目前几乎无法处理其基本功能。如果您不想使用预先存在的sprite渐变图像,一个好方法是通过将CIFilter(在本例中可能是CILinearGradient)应用于基本长方体图像来创建SKSpriteNode,然后从SKTexture中创建SKSpriteNode 马特的答案是正确的,但我还不能添加渐变。这是我目前的尝试

有没有办法在SpriteKit中创建渐变填充框?我尝试过用它填充形状节点,但它注意到只有纯色可以使用skshapenode。

我认为当前的
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)