CCNode-visit-function复制的CCSprite有一个黑暗的边缘

时间:2011-10-16 11:27:15

标签: draw flatten ccsprite

我对CCNode的[visit]功能有疑问

原始图像很好,轮廓清晰,没什么特别的,它由5片叶子精灵组成。

屏幕截图:

http://farm7.static.flickr.com/6107/6248992365_eab5346264_o.png

然后我想使用[CCNode访问]来复制它。

这是代码

-(CCSprite *)flattenSprite:(CCSprite*)sprite textureSize:(float)textureSize {

    CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureSize height:textureSize];
    [rt begin];

    // store the original sprite position
    CGPoint p=sprite.position;
    //set original sprite to a target point for open GL to "visit"
    sprite.position=ccp(textureSize/2,textureSize/2);
    // open GL visit
    [sprite visit];
    //original sprite return to original point
    sprite.position=p;

    [rt end];
    return [CCSprite spriteWithTexture:rt.sprite.texture];
}

通过这个功能,我可以通过限制舞台上存在的精灵数量来优化应用程序的性能,但是“复制的精灵”在它周围有一个黑暗的边缘。它看起来很奇怪 - 特别是当精灵彼此重叠时。

请告诉我,如果您有任何线索/任何地方获得有关此黑暗边缘问题的有用信息

1 个答案:

答案 0 :(得分:0)

-(CCSprite *)flattenSprite:(CCSprite*)sprite textureSize:(float)textureSize {

    CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureSize height:textureSize];
    [rt begin];

    // store the original sprite position
    CGPoint p=sprite.position;
    //set original sprite to a target point for open GL to "visit"
    sprite.position=ccp(textureSize/2,textureSize/2);
    // open GL visit
    [sprite visit];
    //original sprite return to original point
    sprite.position=p;

    [rt end];

    CCSprite *renderSprite = [CCSprite spriteWithTexture:rt.sprite.texture];
    //this will solve the dark edge problem
    [sprite setBlendFunc: (ccBlendFunc) { GL_ONE, GL_ONE_MINUS_SRC_ALPHA }];

    return renderSprite;
}