2

CCSpriteBatchNodeに変換したいのUIImageですが、できる方法はありますか?に変換できることはわかっていますがCCSpriteUIImageで試してみるとCCSpriteBatchNodeクラッシュします。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSpriteBatchNode should NOT be root node'

ありがとう!

CCSprite を UIImage に変換するコードは次のとおりです。

+ (UIImage *)renderUIImageFromSprite:(CCSprite *)sprite {
    CCRenderTexture *renderer = [CCRenderTexture renderTextureWithWidth:sprite.contentSize.width; height:sprite.contentSize.height;];
    [renderer begin];
    [sprite visit];
    [renderer end];
    return [renderer getUIImageFromBuffer];
}

編集:これは作業コードです。

+ (UIImage *)renderUIImageFromCCLabelBMFont:(CCLabelBMFont *)bmfont {
    GLProgram *program = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTextureColor];
    glUseProgram(program->program_);

    int textureWidth = bmfont.contentSize.width;
    int textureHeight = bmfont.contentSize.height;

    CCRenderTexture *renderer = [CCRenderTexture renderTextureWithWidth:textureWidth height:textureHeight];
    bmfont.anchorPoint = ccp(0.0, 0.0);

    CCNode *node = [CCNode node];
    [node addChild:bmfont];

    [renderer begin];
    [node visit];
    [renderer end];

    return [renderer getUIImageFromBuffer];
}
4

1 に答える 1

0

これは自分で必要でした。これは ARC コードであり、CCLabelBMFont のカテゴリとして設定されています。

CCLabelBMFont+UIImage.h

@interface CCLabelBMFont (UIImage)

- (UIImage *)image;

@end

CCLabelBMFont+UIImage.m

@implementation CCLabelBMFont (UIImage)

- (UIImage *)image
{
    CCGLProgram *program = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTextureColor];
    glUseProgram(program->program_);

    CCRenderTexture *renderer = [[CCRenderTexture alloc] initWithWidth:(int)self.contentSize.width
                                                                height:(int)self.contentSize.height
                                                           pixelFormat:kCCTexture2DPixelFormat_RGBA8888];

    CCLabelBMFont *labelBMFont = [[CCLabelBMFont alloc] initWithString:string_
                                                               fntFile:fntFile_
                                                                 width:width_
                                                             alignment:alignment_
                                                           imageOffset:imageOffset_];

    labelBMFont.anchorPoint = ccp(0.0, 0.0);

    CCNode *node = [CCNode node];
    [node addChild:labelBMFont];

    [renderer begin];
    [node visit];
    [renderer end];

    return [renderer getUIImage];
}

@end
于 2012-07-16T13:23:48.167 に答える