cocos2d v3异常抛出从场景中删除精灵

时间:2014-05-18 13:58:49

标签: objective-c cocos2d-iphone removechild

所以我试图制作一个塔防游戏,(塔向前方的敌人射击子弹),所以问题是当我在击中敌人后试图从场景中移除子弹时,它会抛出异常,没有错误在调试器中。

以下是代码:

-(void)shootWeapon
{
CCSprite * bullet = [CCSprite spriteWithImageNamed:@"snowball.png"];
[theGame addChild:bullet];
[bullet setPosition:mySprite.position];//Todo offset snowball to the right of the tower
[bullet runAction:[CCActionSequence actions:[CCActionMoveTo actionWithDuration:0.3     
position:chosenEnemy.mySprite.position],[CCActionCallFunc actionWithTarget:self   
selector:@selector(damageEnemy)],[CCActionCallFunc actionWithTarget:self   
selector:@selector(removeBullet:)], nil]];

}
-(void)removeBullet:(CCSprite *)bullet
{
[bullet.parent removeChild:bullet cleanup:YES];
}

-(void)damageEnemy
{
[chosenEnemy getDamaged:damage];
}

如果有人知道为什么会这样,任何帮助将不胜感激。

欢呼声

1 个答案:

答案 0 :(得分:1)

子弹没有被传递,因此removeBullet:方法的例外。

这一行是问题所在:

[CCActionCallFunc actionWithTarget:self
                          selector:@selector(removeBullet:)]

在调试器上向[bullet.parent removeChild:bullet cleanup:YES];po bullet添加断点,您可能会得到nil。

我的解决方案是使用阻止操作,例如:

CCAction *blockAction = [CCActionCallBlock actionWithBlock:^{
        [bullet removeFromParentAndCleanup:YES];
    }];