如何创建 SKSpriteNode 的图像?

How to create image of SKSpriteNode?

我有一个 SKSpriteNode 有很多 child 个节点。 我在我的游戏中非常频繁地使用该节点和所有 children。

更好的方法是使用所有 children 构建此节点一次,创建一个图像 (SKTexture) 并使用创建的纹理,而不是重新创建 SKSpriteNode 及其所有 children.

有什么办法吗?

SKEffectNode & shouldRasterize

您可以使用 SKEffectNode 并将 shouldRasterize 设置为 true

let effectNode = SKEffectNode()
effectNode.shouldRasterize = true
scene.addChild(effectNode)

The SKEffectNode's output is rasterized and cached internally. This cache is reused when rendering.

现在只需将您的精灵添加到 effectNode

effectNode.addChild(sprite0)
effectNode.addChild(sprite1)
effectNode.addChild(sprite2)

第一次渲染 effectNode 时,生成的图像将被自动缓存。 缓存版本将用于下一帧。

实际上有一种非常简单的方法可以做到这一点。我一直这样做是为了将 ShapeNode 转换为 SpriteNode(因为每个形状需要 1 次绘制调用,而 sprites 不需要)

let texture = SKView().texture(from: desiredNode)
let newSprite = SKSpriteNode(texture: texture)

或者,为简洁起见,在您的游戏场景中:
let newSprite = SKSpriteNode(texture: view!.texture(from: desiredNode))