CCRenderTexture和CCDirector渲染方式有何不同?

时间:2012-11-14 11:49:41

标签: ios cocos2d-iphone

我想在我的项目中使用CCRenderTexture,因为我有很多CCLabelBMFont,它们大多是静态的。将它们全部添加到我的场景会导致一些性能问题(是的,你可以使用BatchNotes等但它并没有真正帮助)。所以我将它们渲染成单个纹理,显着提高了性能!但问题是渲染的纹理和直接渲染的节点看起来不同。我不明白为什么!

我创建了一个cocos2d-sample项目并创建了这个:

CCSprite* testImage = [CCSprite spriteWithFile:@"N.png"];
testImage.position = ccp(100,100);
CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:786 height:1024];
[rt beginWithClear:0 g:0 b:0 a:0];
[testImage visit];
[rt end];
CCSprite* renderedSprite = [CCSprite spriteWithTexture:rt.sprite.texture];
renderedSprite.position = ccp(386,512);
// Flip because CCRenderTexture is flipped
renderedSprite.flipY = YES;
// Add normal node an the rendered sprite
testImage.position = ccp(130,100);
[self addChild:testImage];
[self addChild:renderedSprite];

结果如下: The texture has less glow

这怎么可能?我怎样才能让它们看起来一样? 右边的N是精灵添加“正常”方式,它正确显示。左边的N是纹理。

编辑: 我发现this tutorial暗示混合功能是不同的。所以我正在寻找正确的功能,使它们看起来一样。

1 个答案:

答案 0 :(得分:3)

我找到了解决方案! 我使用this example来创建精灵,但当我再次查看cocos2d-manual时,我看到,您可以将CCRenderTexture直接添加到场景中。多数民众赞成我所做的,它解决了这个问题!

所以正确的代码应该是:

CCSprite* testImage = [CCSprite spriteWithFile:@"N.png"];
testImage.position = ccp(100,100);
CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:786 height:1024];
[rt begin];
[testImage visit];
[rt end];
rt.position = ccp(386,512);
// Add normal node an the rendered sprite
testImage.position = ccp(130,100);
[self addChild:testImage];
[self addChild:rt];