Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

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

$
0
0

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

作者:mydo 发表于2017/4/15 16:26:36 原文链接
阅读:96 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>