This youtube video demonstrates how I build up my background graphics.
但是,我的背景图形设置如下.
我使用两个纹理,如邮票,然后重复.
在这种情况下……一个山顶纹理与雪顶…
没有雪的一个山纹理.
我改变了这些邮票的zPosition以获得“分层”效果.
然后我使用“填充”,它只是纯灰色的SKSpriteNodes,用于覆盖需要灰色填充的部分.
例如.添加填充节点之前
然后在顶部添加带有alpha的彩色屏幕,使山体看起来褪色.
游戏有时冻结……但是当我删除这些图形时它不会冻结.
有没有办法通过在场景加载时基于zPosition合并或展平我的背景图形节点来提高性能?
我该怎么办?
这会改善表现吗?
或者在我的情况下提高性能的最佳方法是什么?
我觉得这个问题很相似……
Merge all SKSpriteNode children into a single SKSpriteNode
但是,我如何在Swift中执行此操作并将zPosition和alpha考虑在内,以便我不会丢失分层效果?
如何轻松地执行bitblit是将所有这些移动到一个名为“background”的新空节点下
现在转到swift文件,并为我们将在代码中创建的新节点设置占位符变量
class GameScene: SKScene { var blitBackground = SKSpriteNode() override func didMove(to view: SKView) { } }
现在,添加这个方便的功能,如果需要,您可以在所有项目中使用它:
func blit(from node: SKNode) -> SKSpriteNode { return SKSpriteNode(texture: SKView().texture(from: node)) }
这是我们用来初始化我们的bitblit背景的方法,并从游戏中删除迟缓的背景:
func blitTheBackground() { // use in didMove let laggyBackground = childNode(withName: "background")! blitBackground = blit(from: laggyBackground) laggyBackground.removeFromParent() addChild(blitBackground) }
这是完成的场景:
class GameScene: SKScene { var blitBackground = SKSpriteNode() func blit(from node: SKNode) -> SKSpriteNode { return SKSpriteNode(texture: SKView().texture(from: node)) } func blitTheBackground() { let laggyBackground = childNode(withName: "background")! blitBackground = blit(from: laggyBackground) laggyBackground.removeFromParent() addChild(blitBackground) } override func didMove(to view: SKView) { blitTheBackground() } }
并且它将节点数从10减少到4 …希望对你来说它也有助于你的抽奖计数!!
如果需要在循环中执行此操作,请确保将其放在自动释放池中以确保在使用后释放内存.从视图创建纹理会占用大量内存,因此如果您不小心,可能会出现错误.
for i in 0..<5 { autoreleasepool{ let laggyBackground = childNode(withName: "background\(i)")! blitBackground = blit(from: laggyBackground) laggyBackground.removeFromParent() addChild(blitBackground) } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。