1

ほとんど静的なCCLabelBMFontがたくさんあるので、プロジェクトでCCRenderTextureを使用したかったのです。それらをすべてシーンに追加すると、パフォーマンスの問題が発生しました(はい、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];

結果は次のようになります。 テクスチャの輝きが少ない

どうすればいいの?どうすれば同じに見えるようになりますか? 右側の N は「通常の」方法で追加されたスプライトで、正しく表示されます。左の N はテクスチャです。

編集:ブレンド関数が異なることを示唆するこのチュートリアルを見つけました。同じように見えるようにするための正しい関数を探しています。

4

1 に答える 1

3

解決策を見つけました!この例を使用してスプライトを作成しましたが、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];
于 2012-11-14T12:08:31.573 に答える