上篇 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,发现场景节点的数量始终保持不变,我们也就解决了这个问题.