Sprite kit SKAction在它之后仍然执行';删除

Sprite kit SKAction在它之后仍然执行';删除,sprite-kit,sequence,objective-c-blocks,skaction,Sprite Kit,Sequence,Objective C Blocks,Skaction,我的AI可以使用这个方法向玩家开火。当人工智能机器人被杀死时,它会自己调用[自我移除行动]。此外,对操作(self.shootAction)的引用也设置为nil。然而,一旦机器人死亡并等待重生,射弹仍然会开火。我的猜测是,这个方法在机器人被杀死之前被调用。此时,bot不可见且处于非活动状态。有没有办法阻止这些操作或运行块的执行?我试着用一个弱引用self,但没用 - (void)shootToward:(CGPoint)position; { CGPoint enemyDirection

我的AI可以使用这个方法向玩家开火。当人工智能机器人被杀死时,它会自己调用[自我移除行动]。此外,对操作(self.shootAction)的引用也设置为nil。然而,一旦机器人死亡并等待重生,射弹仍然会开火。我的猜测是,这个方法在机器人被杀死之前被调用。此时,bot不可见且处于非活动状态。有没有办法阻止这些操作或运行块的执行?我试着用一个弱引用self,但没用

- (void)shootToward:(CGPoint)position;
{
    CGPoint enemyDirection;
    enemyDirection = ccpNormalize(ccpSub(position, self.position));

    SKAction *wait = [SKAction waitForDuration:0.5f];
    SKAction *idle = [SKAction runBlock:^{
        [self idle];
    }];
    SKAction *walkTowardsEnemy = [SKAction runBlock:^{
        [self walkWithDirection:enemyDirection];
    }];
    SKAction *fireAtEnemy = [SKAction runBlock:^{
        [self.delegate fire:self.position
                inDirection:enemyDirection owner:self projNum:0];
    }];
    SKAction *doneShooting = [SKAction runBlock:^{
        [self doneShooting];
    }];

    [self idle];

    self.shootAction = [SKAction sequence:@[walkTowardsEnemy, wait, idle, wait, fireAtEnemy, wait, doneShooting, idle]];

    [self runAction:self.shootAction withKey:@"shootAction"];
    self.shooting = YES;
}

根据,我甚至用“可编码的轻量级对象”替换了这些块,但问题仍然存在。已解决:问题原来是由一个NSTimer引起的,我在机器人死亡时未能使其失效。然后它重置了一个布尔值,允许机器人射击。在spritekitIt中根本不应该使用NSTimer,无论哪种方式,它都会这样做。我有一些东西需要开火,不管比赛时间如何。