所以我试图制作一个塔防游戏,(塔向前方的敌人射击子弹),所以问题是当我在击中敌人后试图从场景中移除子弹时,它会抛出异常,没有错误在调试器中。
以下是代码:
-(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];
}
如果有人知道为什么会这样,任何帮助将不胜感激。
欢呼声
答案 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];
}];