1

このコードでスプライトをクリッピングしています:

//At my CCSprite subclass m.

-(void)visit
{
CGPoint worldOrg = [self convertToWorldSpace:ccp(0, 0)];
CGPoint dest = [self convertToWorldSpace:ccp(self.contentSize.width, self.contentSize.height)];
CGPoint dims = ccpSub(dest, worldOrg);

glEnable(GL_SCISSOR_TEST);

glScissor(worldOrg.x, worldOrg.y, dims.x, dims.y);

#define SHOW_CLIPPED_AREA 1

#if SHOW_CLIPPED_AREA
//Draws a red rectangle showing clipped area
ccDrawSolidRect(ccp(0, 0), ccp(1024, 1024), ccc4f(64, 0, 0, 128));
#endif
[super visit];

glDisable(GL_SCISSOR_TEST);
}

次に、通常どおりスプライトを作成し、 sprite.contentSize プロパティを必要なものに調整します。

CCSprite aSprite = [CCSprite spriteWith...];
aSprite.contentSize = CGSizeMake(20,20);
//Add it to my layer
[self addChild:aSprite];

そして、それは期待どおりに機能します!

問題...

CCSpriteBatchNode に追加すると、スプライトがクリップされません... スプライトは表示されますが、クリップされません。

誰かがこれで私を助けてくれますか?

Steffen Itterheimの ClippingNode クラスも使用しましたが、CCSpriteBatchNode に追加する際にも問題があります。

どんな助けでも大歓迎です。

4

1 に答える 1

0

クリッピングまたは任意のカスタム描画は、スプライト バッチ スプライトでは機能しません。

バッチ ノードが子のレンダリングを引き継ぐため、CCSpriteBatchNode は子に対して visit (または draw) メソッドを呼び出しません。したがって、CCSprite の draw メソッドまたは visit メソッドで記述したコードは、スプライトをスプライト バッチするときに効果がありません。

于 2013-02-09T23:55:34.380 に答える