Cocos2d iphone cocos2d使用动作移除精灵

Cocos2d iphone cocos2d使用动作移除精灵,cocos2d-iphone,Cocos2d Iphone,我有以下设置: 层将精灵作为子对象。精灵的init方法中包含以下代码: id fadeOut = [CCFadeOut actionWithDuration:1.0f]; id death = [CCCallFunc actionWithTarget:self selector:@selector(die)]; self.deathAction = [CCSequence actions:fadeOut, death, nil]; [self runAction:deathAction_];

我有以下设置:

层将精灵作为子对象。精灵的init方法中包含以下代码:

id fadeOut = [CCFadeOut actionWithDuration:1.0f];
id death = [CCCallFunc actionWithTarget:self selector:@selector(die)];
self.deathAction = [CCSequence actions:fadeOut, death, nil];
[self runAction:deathAction_];
死亡动作调用精灵的“死亡”方法,在该方法中,其状态更改为“死亡”

在其更新方法中,层会检查所有子项,并删除“死”的子项:

[self removeChild:child cleanup:YES];
问题是子精灵在这一行之后仍然有2的重新计数。据我所知,它由CCCallFunc保管。如果我省略了这个deathAction,而是删除了不透明度为零的精灵(当它们褪色时),代码就正常工作了,并且调用了dealloc方法


如何通过正确使用操作删除精灵?

您没有显示所有代码。但你似乎一直在引用这个动作,而你很可能忘记了发布它


retainCount
是出了名的不可靠:所以请不要使用它,当然也不要指望它是准确的。

你的参考是对的。我修改了代码,以便移除由sprite内部处理。我通过该操作调用death方法,并在其中调用
[self removeFromParentAndCleanup:YES]
问题是,在此调用之前,我必须调用
[deathAction_uuuurelease]。为什么?我在精灵的dealloc方法中有释放调用?如果有时我想以某种方式而不是通过动作移除精灵,该怎么办?如果你在释放一个对象时不知道你在平衡哪个对象,那么你只是隐藏了一个症状,而没有修复问题。