我为我的敌人分类了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请求,添加了异常断点并得到了这个: