EXC_BAD_ACCESS使用块

时间:2014-08-23 21:31:53

标签: ios sprite-kit exc-bad-access skaction

我为我的敌人分类了SKSpriteNode。这个课程中的一个方法是"血喷" SKAction序列由块组成,大约需要0.9秒才能完成。

-(void)runBloodBurst
{
    SKSpriteNode *bloodBurst = [SKSpriteNode spriteNodeWithTexture:[_animations bloodBurstLeft2Start]];
    bloodBurst.zPosition = 250;
    bloodBurst.position = CGPointMake(-32, 0);

    SKAction *wait0 = [SKAction waitForDuration:0.2];

    SKAction *wait1 = [SKAction waitForDuration:0.7];

    SKAction *block0 = [SKAction runBlock:^{
        [bloodBurst runAction:[_animations bloodBurstLeft2]];
        [self addChild:bloodBurst];
    }];

    SKAction *block1 = [SKAction runBlock:^{
        [bloodBurst removeFromParent];
        self.readyBloodBurst2 = true;
    }];

    [self runAction:[SKAction sequence:@[wait0, block0, wait1, block1]]];
}

如果玩家非常热情地进行攻击,可以在0.9秒过后再次调用血喷方法(无数血鞘)。但是,这会随机抛出EXEC_BAD_ACCESS错误。

我的解决方案是使用BOOL ivar不允许再次运行序列,直到它完成。这阻止了EXEC_BAD_ACCESS,但我不明白其背后的根本原因。

非常感谢您的解释。

编辑:根据LearnCocos2D请求,添加了异常断点并得到了这个:

enter image description here

enter image description here

enter image description here

0 个答案:

没有答案