私は cocos2d 2.0 を使用しましたが、スプライト アニメーションが切り替わったときにクラッシュすることが観察されました。ここにコードがあります
@interface PPActor : CCSprite
{
CCRepeatForever *pirateIdleAnim;
CCSequence *mPirateDashAnim;
CCRepeatForever *mPirateRocketAnim;
}
//ケース 1: 2 回目の再生でクラッシュ
-(void)loadAnim
{
CCAnimate *AnimActions = [CCAnimate actionWithAnimation:animation];
id calFun = [CCCallFunc actionWithTarget:self selector:@selector(dashAnimDone)];
mPirateDashAnim = [CCSequence actions:AnimActions, calFun, nil];
mPirateDashAnim.tag = kTagDashAnim;
}
-(void)runDashAnim
{
[self stopActionByTag: kTagDashAnim];
[self runAction:mPirateDashAnim];
}
//ケース 2: クラッシュは発生しないが、メモリ リークが発生する… (retain を使用)
-(void)loadAnim
{
CCAnimate *AnimActions = [CCAnimate actionWithAnimation:animation];
id calFun = [CCCallFunc actionWithTarget:self selector:@selector(dashAnimDone)];
mPirateDashAnim = [[CCSequence actions:AnimActions, calFun, nil] retain];
mPirateDashAnim.tag = kTagDashAnim;
}
-(void)runDashAnim
{
[self stopActionByTag: kTagDashAnim];
[self runAction:mPirateDashAnim];
}
//ケース 3: 再びクラッシュが観測されました
-(void)loadAnim
{
CCAnimate *AnimActions = [CCAnimate actionWithAnimation:animation];
id calFun = [CCCallFunc actionWithTarget:self selector:@selector(dashAnimDone)];
mPirateDashAnim = [CCSequence actions:AnimActions, calFun, nil];
mPirateDashAnim.tag = kTagDashAnim;
}
-(void)runDashAnim
{
[self stopActionByTag: kTagDashAnim];
[self runAction:[mPirateDashAnim copy]];
}
このクラッシュとメモリ リークを克服するにはどうすればよいですか?