1

私はこの質問からのヒントを使用していますstackoverflow.com/questions/12413460 それは仕事です。私の問題は、アプリケーションが再起動しないか、再構築されていないときにイメージが更新されないことです。スクリーンショットを作成する方法を使用します。私は同じ機能を持っています:タッチスクリーを使用すると、スクリーンショットがドキュメントディレクトリに保存されます。ユーザーは2番目、2番目のスクリーンショットを保存にタッチします。など。しかし、私のアプリでは、キャッシュまたはバッファリングされているため、毎回最初のタッチのスクリーンショットのみが作成されます。

-(UIImage *) screenshotWithStartNode:(CCNode*)startNode
{
    [CCDirector sharedDirector].nextDeltaTimeZero = YES;

    CGSize winSize = [CCDirector sharedDirector].winSize;
    CCRenderTexture* rtx = 
    [CCRenderTexture renderTextureWithWidth:winSize.width 
                                 height:winSize.height];
    [rtx begin];
    [startNode visit];
    [rtx end];

    return [rtx getUIImage];
}

ユーザーがタッチスクリーンを使用するときに呼び出します(例)

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    CCNode *n = [[[CCDirector sharedDirector] runningScene].children objectAtIndex:0];
    UIImage *img = [self screenshotWithStartNode:n];//this image always same by one, same when user touch screen first time
    CCSprite *spriteTemp = [CCSprite spriteWithCGImage:img.CGImage key:@"image"];
    [self addChild:spriteTemp];
}

画面上のアイテムは、時間の異なる位置にあります。画面を最初にタッチすると正しい画像が得られますが、他のすべてのタッチは最初の画像としてスクリーンショットを作成し、線量は変化しません。

多分それはバッファCCRenderTextureだと思いますか?または画像キャッシュ?私は何をしますか?

[img release]を試し、タッチ後にCGImageRelease(img.CGImage)を試しましたが、アプリがクラッシュします。

4

1 に答える 1

2

そうです、以前の情報はキャッシュされています。試してみてください

[[CCTextureCache sharedTextureCache] removeTextureForKey:@"image"];

上書きしようとする前に。

または、一度に複数の画像が必要な場合は、差分キー名を使用します。

于 2012-09-17T06:49:58.470 に答える