如何创建 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))
我有一个 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))