渲染CCSprite纹理给出了旧图像

时间:2013-11-25 14:11:18

标签: ios iphone cocos2d-iphone

我有一个UIImagePicker的场景。从库中选择图像将呈现具有所选图像的新场景。在呈现一个新场景后,我使用以下方法显示从onEnter方法调用的图像,其中包含从库中选取的图像。

-(void) loadPuzzleImage:(UIImage*)selectedImageFromLibrary {

    puzzleImage = [[CCSprite alloc] initWithCGImage:[selectedImageFromLibrary CGImage] key:@"selectedimage"];
    puzzleImage.anchorPoint = ccp(0,0);
    puzzleImage.opacity = 80.0f;
    puzzleImage.position = ccp(screenSize.width - puzzleImage.contentSize.width - 136,
                                   screenSize.height - puzzleImage.contentSize.height - 48);

    [self addChild: puzzleImage z:1 tag:10];
    [puzzleImage release];
}

当我返回并从库中选择新图像时,它只显示上一张图像。我通过在CCSprite分配中使用不同的CGIImage键来解决它。但是当我使用渲染纹理来获取CCSprite图像时,它只返回前一个图像而不是当前图像。我不知道为什么。我使用以下代码渲染图像。

-(UIImage *) convertSpriteToImage:(CCSprite *)sprite {

    CGPoint p = sprite.anchorPoint;
    [sprite setAnchorPoint:ccp(0,0)];
    CCRenderTexture *renderer = [[CCRenderTexture alloc] initWithWidth:sprite.contentSize.width 
                                                                height:sprite.contentSize.height 
                                                           pixelFormat:kCCTexture2DPixelFormat_RGBA8888];
    [renderer begin];
    [sprite visit];
    [renderer end];
    [sprite setAnchorPoint:p];
    return [renderer getUIImage];
}

并通过

调用此方法
UIImage* tempPuzzle = [self convertSpriteToImage:
                           [CCSprite spriteWithTexture:[puzzleImage texture]]];

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用“可丢弃”纹理创建精灵后,您应立即将带有图像名称的removeTextureForKey:消息发送到CCTextureCache。这应该足以在下次创建具有相同图像名称的精灵时使用相同的键重新加载纹理。