我对CCNode的[visit]功能有疑问
原始图像很好,轮廓清晰,没什么特别的,它由5片叶子精灵组成。
屏幕截图:
然后我想使用[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];
}
通过这个功能,我可以通过限制舞台上存在的精灵数量来优化应用程序的性能,但是“复制的精灵”在它周围有一个黑暗的边缘。它看起来很奇怪 - 特别是当精灵彼此重叠时。
请告诉我,如果您有任何线索/任何地方获得有关此黑暗边缘问题的有用信息
答案 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;
}