1

レイヤーをマスクして、長方形を通してレイヤーのコンテンツを表示する方法を探しています(実際には、複数の長方形で下にあるレイヤーのコンテンツを表示する必要があります)。

私はこの同様の質問に出くわしました: Cocos2diPhone-スプライトクリッピング/マスク/フレーム

解決策がありました:http: //www.learn-cocos2d.com/2011/01/cocos2d-gem-clippingnode/

ただし、このクラスを使用しようとすると、「関数'glPushMatrix'の暗黙の宣言はC99では無効です」という警告が表示されます...「プロパティ'deviceOrientation'がタイプ'CCDirector*のオブジェクトに見つかりません」というエラーも表示されます。 '"

これを最新バージョンのcocos2dで動作させるには、何をする必要がありますか?

...とにかく、私はdeviceOrientationのものをコメントアウトしましたが、それが機能するかどうかをテストするためだけに、機能していないようです。

私はCCBatchNodeを持っています:

    sheet = [CCSpriteBatchNode batchNodeWithFile:@"bg.png" capacity:500];

次に、それに多くのスプライトを追加します

    [sheet addChild:sprite1];
    [sheet addChild:sprite2];
    [sheet addChild:sprite3];

次に、クリッピングノードレイヤーを作成します

ClippingNode *clipNode = [ClippingNode node];
clipNode.clippingRegion = CGRectMake(50, 50, 200, 200);

次に、スプ​​ライトシートとclipNodeを追加します。

[layer addChild:sheet];
[layer addChild:clipNode];

次に、それをCCSpriteオブジェクトに追加します

[self addChild:layer];

..。

その結果、シートから多くのスプライトが表示されますが、クリッピングマスクがありません。コンソールに100万が表示されます:「-[CCTextureAtlasdrawNumberOfQuads:fromIndex:]556のOpenGLエラー0x0502」

だから.....私は何が間違っているのかわかりません-またはこれがすべてopenGL警告とデバイスの向きのエラーに関係しているのかどうか...?

更新:#include <OpenGLES / ES1 / gl.h>をClippingNode.mに追加し、glpush / pop警告を取り除きました。ただし、clipNodeの子をレイヤーに追加すると、同じOpenGLエラーが発生します。 ..。。

4

1 に答える 1

0

cocos2d2.0のシェーダーでそれを行うことができます。このチュートリアルをご覧ください。

http://www.raywenderlich.com/4428/how-to-mask-a-sprite-with-cocos2d-2-0

于 2012-08-30T22:00:57.603 に答える