与Cocos2D中的glscissor相反?

时间:2014-04-14 16:34:35

标签: opengl-es cocos2d-iphone

我发现了一个名为ClippingNode的类,我可以在sprite上使用它来只显示指定的矩形区域:https://github.com/njt1982/ClippingNode

一个问题是我需要完全相反,这意味着我想要反过来。我希望显示指定矩形之外的所有内容,并将所有内容都取出。

在我的测试中,我正在使用精灵的位置,这将更新帧,因此需要发生意味着将定义新的剪切矩形。

CGRect menuBoundaryRect = CGRectMake(lightPuffClass.sprite.position.x, lightPuffClass.sprite.position.y, 100, 100);
ClippingNode *clipNode = [ClippingNode clippingNodeWithRect:menuBoundaryRect];

[clipNode addChild:darkMapSprite];
[self addChild:clipNode z:100];

我注意到ClippingNode类在里面分配,但我没有使用ARC(项目太大而且太复杂而无法更新到ARC)所以我想知道我需要释放什么和哪里。

我已经尝试了几个掩蔽类,但无论我的掩模适合整个精灵(我的精灵覆盖整个屏幕。另外掩模需要移动,所以我认为glscissor将是一个很好的选择,如果我能得到它做反过来。

2 个答案:

答案 0 :(得分:1)

我曾经使用https://codeload.github.com/NoodlFroot/ClippingNode/zip/master

中的CCScissorNode.m

实现(不是你正在寻找的逆向)是:

    CGRect innerClippedLayer = CGRectMake(SCREENWIDTH/14, SCREENHEIGHT/6, 275, 325);

    CCScissorNode *tmpLayer = [CCScissorNode scissorNodeWithRect:innerClippedLayer];
    [self addChild:tmpLayer];

所以对你来说,如果你知道区域(你不想显示的矩形区域,即反向关闭),你知道屏幕区域,那么你可以从屏幕区域中扣除矩形。这会给你相反的区域。我没有这样做。可能是明天我可以发布一些代码。

答案 1 :(得分:1)

您不需要任何开箱即用的东西。

您必须使用模具定义CCClippingNode,然后将其设置为inverted,您就完成了。我添加了一个胡萝卜精灵,以显示如何在剪切节点中添加精灵,以便将其考虑在内。

@implementation ClippingTestScene
{
    CCClippingNode *_clip;
}

实施部分

_clip = [[CCClippingNode alloc] initWithStencil:[CCSprite spriteWithImageNamed:@"white_board.png"]];
_clip.alphaThreshold = 1.0f;
_clip.inverted = YES;

_clip.position = ccp(self.boundingBox.size.width/2 , self.boundingBox.size.height/2);
[self addChild:_clip];

_img = [CCSprite spriteWithImageNamed:@"carrot.png"];
_img.position = ccp(-10.0f, 0.0f);
[_clip addChild:_img];

你必须为此设置一个额外的标志,但是Cocos会在控制台中吐出你需要做的事情。