我有一个使用 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 使用不同的键来解决它。但是当我使用 Render Texture 获取 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]]];
我们将不胜感激。
最佳答案
使用“可丢弃”纹理创建 Sprite 后,您应该立即将带有图像名称的 removeTextureForKey:
消息发送到 CCTextureCache。这应该足以在您下次创建具有相同图像名称的 Sprite 时使用相同的键重新加载纹理。
关于ios - 渲染CCSprite纹理给出旧图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20195224/