作为标题,我已经提到了下面的代码
CCSprite *sprite = (CCSprite *)node;
CCTexture2D *texture2d = [sprite texture];
如何从 sprite 获取 UIImage *p?
作为标题,我已经提到了下面的代码
CCSprite *sprite = (CCSprite *)node;
CCTexture2D *texture2d = [sprite texture];
如何从 sprite 获取 UIImage *p?
在您的情况下,只需将下一个方法添加到您的课程中:
- (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];
}
如果您使用的是 cocos2d 2.x,则将 sprite 渲染到 CCRenderTexture 并调用该渲染纹理的 getUIImage 方法。
通过查看 CCSprite 和 CCTexture2D 的源代码,您可以看到图像仅用于创建纹理数据,图像对象没有保留,而是暂时使用。
CCTexture2D源代码:
http://code.google.com/p/cocos2d-iphone/source/browse/trunk/cocos2d/CCTexture2D.m?r=1882
CCSprite来源:
http://code.google.com/p/cocos2d-iphone/source/browse/trunk/cocos2d/CCSprite.m?r=1747
查看使用 CGImageRef 的 init 方法