0

我有一个关于 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];
}

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

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

4

1 回答 1

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;
}
于 2014-08-12T09:14:59.437 回答