【发布时间】:2012-10-19 15:04:18
【问题描述】:
作为标题,我已经提到了下面的代码
CCSprite *sprite = (CCSprite *)node;
CCTexture2D *texture2d = [sprite texture];
如何从 sprite 中获取 UIImage *p?
【问题讨论】:
标签: cocos2d-iphone uiimage ccsprite
作为标题,我已经提到了下面的代码
CCSprite *sprite = (CCSprite *)node;
CCTexture2D *texture2d = [sprite texture];
如何从 sprite 中获取 UIImage *p?
【问题讨论】:
标签: cocos2d-iphone uiimage ccsprite
在您的情况下,只需将下一个方法添加到您的课程中:
- (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 方法
【讨论】: