我有一个带有很多子节点的 SKSpriteNode 。 我在游戏中经常使用该节点和所有孩子。
更好的方法是与所有子节点一起构建此节点,创建一个图像( SKTexture )并使用创建的纹理,而不是重新创建SKSpriteNode及其所有子节点。
有没有办法做到这一点?
答案 0 :(得分:0)
您可以SKEffectNode
我们将shouldRasterize
设置为true
。
let effectNode = SKEffectNode()
effectNode.shouldRasterize = true
scene.addChild(effectNode)
SKEffectNode的输出在内部进行栅格化和缓存。渲染时重用此缓存。
现在只需将精灵添加到effectNode
effectNode.addChild(sprite0)
effectNode.addChild(sprite1)
effectNode.addChild(sprite2)
第一次渲染effectNode
时,生成的图像将自动缓存。
缓存版本将用于下一帧。
答案 1 :(得分:0)
实际上有一种非常简单的方法可以做到这一点。我一直这样做将ShapeNodes转换为SpriteNodes(因为每个形状需要1个绘图调用,而精灵不需要)
let texture = SKView().texture(from: desiredNode)
let newSprite = SKSpriteNode(texture: texture)
或者,在你的游戏中为了简洁起见:
let newSprite = SKSpriteNode(texture: view!.texture(from: desiredNode))