我正在使用Xcode编写游戏并使用Sprite Kit在iOS模拟器上测试它。
我使用的SKEmitterNode
似乎导致内存泄漏;当游戏运行时,每次SKEmitterNode
被放置在屏幕上(当绘制'爆炸')时,在"显示调试导航器"在左边,记忆无限制地增加。
有没有人能解决这个问题?
以下代码全部位于MYScene.m
。
我的SKEmitterNode被称为_EmitterShatterApart
,这是一个名为" ShatterApart.sks"的爆炸。 _PositionObject
是一个SKSpriteNode,它是爆炸的对象。 _bgLayer
是背景图层。
@implementation MyScene
{
SKEmitterNode *_EmitterShatterApart;
...
}
-(void)MatchIncorrect
{
...
_EmitterShatterApart = [NSKeyedUnarchiver unarchiveObjectWithFile: [[NSBundle mainBundle] pathForResource:@"ShatterApart" ofType:@"sks"]];
_EmitterShatterApart.position = _PositionsObject.position;
if (!_EmitterShatterApart.parent) {
//[self.particleLayerNode addChild:_EmitterShatterApart];
[_bgLayer addChild:_EmitterShatterApart];
_EmitterShatterApart.userInteractionEnabled=FALSE;
[_EmitterShatterApart resetSimulation];
}
}
答案 0 :(得分:1)
在添加新发射器之前,您应该从场景中删除旧发射器。试试:
-(void)MatchIncorrect
{
...
[_EmitterShatterApart removeFromParent];
_EmitterShatterApart = [NSKeyedUnarchiver unarchiveObjectWithFile: [[NSBundle mainBundle] pathForResource:@"ShatterApart" ofType:@"sks"]];
...
如果你不这样做,那么你继续在场景中添加发射器,因此占用内存而不释放它。