0

我正在使用 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];
        }
}
4

1 回答 1

1

在添加新的发射器之前,您应该从场景中移除旧的发射器。尝试:

-(void)MatchIncorrect
{
    ...
    [_EmitterShatterApart removeFromParent];
    _EmitterShatterApart = [NSKeyedUnarchiver unarchiveObjectWithFile: [[NSBundle mainBundle] pathForResource:@"ShatterApart" ofType:@"sks"]];
    ...

如果你不这样做,那么你会继续在场景中添加发射器,因此会占用内存而不会释放它。

于 2014-07-02T15:48:43.310 回答