Cocos2d iphone 如何将CCSprite图像转换为UIImage?

Cocos2d iphone 如何将CCSprite图像转换为UIImage?,cocos2d-iphone,uiimage,ccsprite,Cocos2d Iphone,Uiimage,Ccsprite,作为标题,我提到了下面的代码 CCSprite *sprite = (CCSprite *)node; CCTexture2D *texture2d = [sprite texture]; 如何从sprite获取UIImage*p?通过查看CCSprite和CCTexture2D的源代码,您可以看到该图像仅用于创建纹理数据,而图像对象不是保留的,而是临时使用的 CCTexture2D来源: CCSprite来源: 如果您使用的是CoCoS2D2.x,请查看使用CGImageRef的init

作为标题,我提到了下面的代码

CCSprite *sprite = (CCSprite *)node;
CCTexture2D *texture2d = [sprite texture];

如何从sprite获取UIImage*p?

通过查看CCSprite和CCTexture2D的源代码,您可以看到该图像仅用于创建纹理数据,而图像对象不是保留的,而是临时使用的

CCTexture2D来源:

CCSprite来源:


如果您使用的是CoCoS2D2.x,请查看使用CGImageRef的init方法,将sprite渲染到CCRenderTexture并调用该渲染纹理的getUIImage方法。

在您的情况下,只需将下一种方法添加到类中:

 - (UIImage *) imageFromSprite :(CCSprite *)sprite
{
    int tx = sprite.contentSize.width;
    int ty = sprite.contentSize.height;

    CCRenderTexture *renderer   = [CCRenderTexture renderTextureWithWidth:tx height:ty];

    sprite.anchorPoint  = CGPointZero;

    [renderer begin];
    [sprite visit];
    [renderer end];

    return [renderer getUIImage];
}
如何使用:

CCSprite *sprite = (CCSprite *)node;
UIImage *p = [self imageFromSprite:sprite]

我认为这是一个更好的方法。将此添加为CCNode上的类别

-(UIImage*)image {
    CCRenderTexture* renderer = [CCRenderTexture renderTextureWithWidth:self.contentSize.width height:self.contentSize.height];

    const CGPoint ANCHORBEFORE = self.anchorPoint;
    self.anchorPoint = CGPointZero;

    [renderer begin];
    [self visit];
    [renderer end];
    self.anchorPoint = ANCHORBEFORE;

    return [renderer getUIImage];
}

不确定我做错了什么,但使用此选项图像会非常错位。在渲染之前,您正在更改主播点。以后需要将其更改回原始值。