Swift3中如何将SKSpriteNode合并到SKTexture中形成新的SKSpriteNode?

How to merge SKSpriteNode into a SKTexture to form new SKSpriteNode in Swift 3?

我正在开发 ios 应用程序。我在屏幕上有一个 SKSpriteNode,我从用户那里得到一张我存储为 SKTexture 的绘图。我想将这两者结合起来,并将它们作为一个新的 SKSpriteNode 引入。

问题:我找不到关于如何将 SKSpriteNode 合并到 SKTexture 中的文档。我确定有办法做到这一点。有人会有这方面的示例代码吗?

不确定 "merge" 是什么意思。如果您想使用现有的 SKTexture 创建一个新的 SKSpriteNode 那么这可能是您正在寻找的代码:

    let newSprite = SKSpriteNode(texture: yourSKTexture)

您可以使用一个容器来容纳两个精灵,并使用 SKView 的 texture(from:) 方法从中创建一个纹理,如下所示:

override func didMove(to view: SKView) {

        backgroundColor = .black

        let container = SKNode()

        let left = SKSpriteNode(color: .purple, size: CGSize(width: 100, height: 100))
        let right = SKSpriteNode(color: .yellow, size: CGSize(width: 100, height: 100))

        container.addChild(left)
        container.addChild(right)

        left.position.x = 50
        right.position.x = -50

        addChild(container)

        if let texture = view.texture(from: container) {
            let sprite = SKSpriteNode(texture:texture)
            addChild(sprite)
            sprite.run(SKAction.moveTo(y: 300, duration: 5))
        }

    }

如果您想从节点内容的一部分创建纹理,那么您可以使用 SKView 的 texture(from:crop:) 方法进行一些裁剪。

您可能必须使用 CoreGraphics 来执行此操作。使用 SKTexture.cgImage() 方法将 SKTextures 转换为 CGImage,使用 CoreGraphics 组合它们,然后从结果中创建一个新纹理。 SKTexture.init(cgImage:) 方法让您使用 CGImage 对象构建纹理。

我使用 Core Graphics 的次数不多,但这里有一些相关阅读的链接。我想你会想要使用 CGLayer class 来告诉 CoreGraphics 如何堆叠纹理并随着时间的推移重用精灵纹理,以便 CoreGraphics 可以缓存它以加快速度。

Core Graphics 使用 Quartz 2D 进行快速的 2D 图形操作。我没怎么玩过它,但我想它应该是你要找的。

参考资料:

关注我,我觉得很有趣!

编辑 1: 您还必须在精灵上使用 SKMutableTexture。 class 允许动态更改纹理数据。