【问题标题】:EXC_BAD_ACCESS during [SKAction removeFromParent][SKAction removeFromParent] 期间的 EXC_BAD_ACCESS
【发布时间】:2014-07-24 08:09:24
【问题描述】:

好的,所以标题使这看起来很容易解决,但问题就在这里。这些对象仅通过下面的循环进行操作,并删除

[SKAction removeFromParent];

解决了问题,只有对象仍然存在,因为我可以看到内存消耗随着时间的推移而增加,这会降低帧速率并增加 CPU。

我不知道为什么这会导致内存访问异常。提前致谢。

for (int i=0;i<30; i++) {
    SKSpriteNode *particle = [SKSpriteNode spriteNodeWithColor:[SKColor purpleColor] size:CGSizeMake(3, 3)];
    particle.zPosition = 0;
    particle.position = position; // passed in through method call
    [self addChild:particle];

    SKAction *move = [SKAction moveByX:ScalarRandomRange(-25, 25) y:ScalarRandomRange(-25, 25) duration:0.1];
    SKAction *fadeOut = [SKAction fadeOutWithDuration:0.5];

    [particle runAction:[SKAction sequence:@[move,fadeOut]] withKey:@"explosion"];
}

这是通话位置的屏幕截图- 出现问题的堆栈。

我在更新方法中添加了以下代码

-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
NSMutableArray *killList = [[NSMutableArray alloc]init];

for (SKNode *node in [self children]) {
    if ([node.name isEqualToString:@"particle"]) {
        if (!([node actionForKey:@"explosion"])) {
            [killList addObject:node];
        }
    }
}

for (SKNode *node in killList) {
    [node removeFromParent];
}

}

它似乎已经修复了异常问题,但我仍然注意到内存略有上升,我需要在仪器中进行调查。

不过,这似乎是一种解决问题的骇人听闻的方法,因为我应该能够使用

[SKAction removeFromParent];

按照我的顺序。

【问题讨论】:

  • 看起来这个问题可能与我遇到的问题有点不同。
  • 有什么不同?
  • 好的,所以您是说您收到 EXC_BAD_ACCESS 但具体是在何时何地?调用堆栈说什么?它真的指向 removeFromParent 吗?请注意,内存的增加可能是任何事情,您只能通过查看 Instrument 的活动对象列表来确定动作或 sprite 是否保留在内存中。
  • 我添加了截图。

标签: ios objective-c sprite-kit


【解决方案1】:

我了解到您想在调用 removeFromAction 方法之前检查您的节点是否还活着,这可以是一个解决方案:

particle.name = @"particle";

[particle runAction:[SKAction sequence:@[move, fadeOut, ([self childNodeWithName:@"particle"]?[SKAction removeFromParent]:nil)]]];

(我同意 LearnCocos2D 的问题可能有除 removeFromAction 之外的其他原因)

【讨论】:

  • 我尝试使用它,但它仍然崩溃并出现同样的异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多