如何将渐变应用于从路径创建的 SKShapeNode

How to apply a gradient to SKShapeNode created from a path

我正在尝试将渐变纹理应用于从路径创建的 SKShapeNode,以便线条从纯色变为透明。 这适用于 SKSpriteNode 但我无法让它在 SKShapeNode 上工作。 有谁知道这个问题的解决方案?当然像这样基本的东西应该是可能的?

我试过各种各样的东西。最明显的一个是我试图将它应用为 strokeTexture(见下面的代码)。 此代码演示了在 SpriteNode 上工作的渐变,但相同的纹理在 ShapeNode 上给出了不同的结果。

我试图通过尝试使用着色器来解决这个问题(但我无法让它工作 either/similar 问题)。我试图用一个关节将 spriteNode 固定到 shapeNode,但我无法将它完美地固定到 stick/fixed,因为在我的应用程序中,有问题的线四处移动(作为 2 个圆圈之间的切线) 运行 方向问题。

所以,回到第一个问题。我敢肯定,这么简单的事情应该是可能的。也许我忽略了什么?

以此简化代码为例:

// create gradient texture (with help of https://github.com/maximbilan/SKTextureGradient/blob/master/SKTextureGradient.swift)
var testTexture = SKTexture(size: CGSize(width: 200, height: 1), color1: CIColor(red: 1.0, green: 0.0, blue: 1.0, alpha: 1.0), color2: CIColor(red: 1.0, green: 0.0, blue: 1.0, alpha: 0.0), direction: GradientDirection.Left)
// create path for shape node
var testPath = CGMutablePath()
testPath.move(to: CGPoint(x: 50, y: 200))
testPath.addLine(to: CGPoint(x: 250, y: 200))
testPath.closeSubpath()
// assign path to shape
var testLine = SKShapeNode()
testLine.path = testPath
testLine.lineWidth = 1
self.addChild(testLine)
// add gradient as strokeTexture
testLine.strokeColor = UIColor.white
testLine.strokeTexture = testTexture
// apply gradient to SKSpriteNode
var testSprite = SKSpriteNode()
testSprite.size = CGSize(width: 200, height: 1)
testSprite.position = CGPoint(x: 50 + (testSprite.frame.width / 2), y: 150)
testSprite.texture = testTexture
self.addChild(testSprite)

输出如下:

如何让第一行(SKShapeNode)看起来像第二行(SKSpriteNode)?

你真的应该感谢我,因为我必须使用 iPhone 而不是模拟器来进行试错。

testLine.isAntialiased = false

将解决您的问题。