SpriteKit中Node数量只增不降的原因和解决

来源:互联网 发布:苏黎世大学留学 知乎 编辑:程序博客网 时间:2024/06/05 15:38

上篇 SpriteKit代码动态调整sks文件中粒子的颜色 博客中的App,运行中发现场景中的Node数量不断在增多,并没有减少,只见内存占用不断变大,虽然增长幅度很小,但强迫症伤不起…

只有一个可能,Node没有被释放!

检查代码发现,动态生成的Node只有小球和粒子效果,将粒子产生的代码注释掉后发现Node数量恢复正常了!!!那么就是粒子没有从场景中删掉.

虽然粒子正常播放完后会hide,但并没有从删除掉…

所以我们写个Action吧:

if let fireParticles = SKEmitterNode(fileNamed: "FireParticles") {            fireParticles.position = ball.position            addChild(fireParticles)            let actWait = SKAction.wait(forDuration: 2.5)            let actBlk = SKAction.run {                fireParticles.removeFromParent()            }            let seq = SKAction.sequence([actWait,actBlk])            fireParticles.run(seq)        }

因为粒子播放时间是2.5秒,所以我们等待2.5后将其删除,其实SKAction还提供了一种更简单的方法,就是removeFromParent方法,上面的代码可以修改如下:

if let fireParticles = SKEmitterNode(fileNamed: "FireParticles") {            fireParticles.position = ball.position            addChild(fireParticles)            let actWait = SKAction.wait(forDuration: 2.5)            let actRemove = SKAction.removeFromParent()            let seq = SKAction.sequence([actWait,actRemove])            fireParticles.run(seq)        }

再次运行App,发现场景节点的数量始终保持不变,我们也就解决了这个问题.

0 0
原创粉丝点击