1

我正在寻找一种方法来屏蔽图层并通过矩形显示图层的内容(实际上我想要多个矩形来显示底层的内容)。

我遇到了这个类似的问题: Cocos2d iPhone - Sprite cliping/mask/frame

有一个解决方案:http: //www.learn-cocos2d.com/2011/01/cocos2d-gem-clippingnode/

但是,当尝试使用此类时,我收到警告:“函数 'glPushMatrix' 的隐式声明在 C99 中无效”......我还收到错误消息:“在 'CCDirector * 类型的对象上找不到属性 'deviceOrientation' '"

我需要做什么才能让它与最新版本的 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];

...

结果是,我从工作表中看到了许多精灵,但没有剪贴蒙版。我的控制台显示一百万:“OpenGL 错误 0x0502 in -[CCTextureAtlas drawNumberOfQuads:fromIndex:] 556”

所以.....我不确定我做错了什么 - 或者这一切是否与openGL警告和设备方向错误有关......?

更新:我在 ClippingNode.m 中添加了#include <OpenGLES/ES1/gl.h>,它消除了 glpush/pop 警告。但是一旦我将 clipNode 子节点添加到图层中,仍然会导致相同的 OpenGL 错误...

4

1 回答 1

0

您可以使用 cocos2d 2.0 中的着色器来实现。看看这个教程。

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

于 2012-08-30T22:00:57.603 回答