0

コンソールで上記の警告を表示してクラッシュするアプリケーションを作成しています。

2 つのスプライトがあります。

  Train=[CCSprite spriteWithFile:@"train.png"];
    [self addChild:train z:0 tag:1];

  AlphaImage=[CCSprite node];
    AlphaImage.position=ccp(245,155);
    [Train addChild:AlphaImage z:1 tag:2];

他の方法では、アニメーションを使用して AlphaImage を初期化しています。

CCSpriteFrameCache *frameCache1 =[CCSpriteFrameCache sharedSpriteFrameCache];   
[frameCache1    addSpriteFramesWithFile:plist1];                                
CCSpriteBatchNode *danceSheet1 = [CCSpriteBatchNode batchNodeWithFile:png1];    
[self addChild:danceSheet1];                                

NSMutableArray *animFrames1 = [NSMutableArray arrayWithCapacity:frame[x]];      
for(int i = 1; i < frame[x]+1; i++) {
    NSString *namef1=[NSString stringWithFormat:@"%@%i.png",alpha1,i];              
    CCSpriteFrame *frame1 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:namef1];   


    [animFrames1 addObject:frame1];
}

CCAnimation *anim1 = [CCAnimation animationWithFrames:animFrames1 delay:0.3f]; 
CCAnimate *animN1 = [CCAnimate actionWithAnimation:anim1];                      
CCRepeatForever *repeat1 = [CCRepeatForever actionWithAction:animN1];                   
[AlphaImage runAction:repeat1];     

zwoptex を使用して、plist とテクスチャ アトラスを作成しました。
電車が行き来すると、アニメーションの plist とテクスチャ アトラスが変化します。しかし、4 ~ 5 回実行すると、アプリケーションがクラッシュします。また、新しいアニメーションが AlphaImage に来る前に、すべてのフレームとテクスチャを解放しました。これを使用しました。

[CCSpriteFrameCache purgeSharedSpriteFrameCache];  
[CCTextureCache purgeSharedTextureCache];   

アプリケーションに hd 画像を使用しています。多くのドキュメントを調べましたが、次のように提案されています。

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];

ただし、コンソールでは、これらの行を使用したフレームの削除については何も表示されません。私が間違っていることはありますか?

4

2 に答える 2

1

このステートメントを実行している場所は[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];、NSObject の performSelectorInBackground メソッドを使用してバックグラウンド スレッドを実行します。

于 2011-04-14T07:43:48.457 に答える
0

アニメーションの終了後に配列を解放してみてください。

//これが原因かもしれません。

[animFrames1 release];
animFrames1 = nil;
于 2011-04-15T09:06:38.637 に答える