Opengl es Cocos2D中glscissor的对面?

Opengl es Cocos2D中glscissor的对面?,opengl-es,cocos2d-iphone,Opengl Es,Cocos2d Iphone,我发现了一个名为ClippingNode的类,我可以在精灵上使用它来只显示指定的矩形区域: 一个问题是我需要做完全相反的事情,这意味着我想要的是相反的结果。我希望显示指定矩形之外的所有内容,并取出其中的所有内容 在我的测试中,我使用了一个精灵的位置,它将更新帧,所以这将意味着新的剪裁矩形将被定义 CGRect menuBoundaryRect = CGRectMake(lightPuffClass.sprite.position.x, lightPuffClass.sprite.position

我发现了一个名为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类alloc,但我没有使用ARC(项目太大太复杂,无法更新为ARC),所以我想知道我还需要发布什么以及在哪里发布


我尝试了几个掩蔽类,但是我的任何掩蔽都适用于整个精灵(我的精灵覆盖了整个屏幕。另外,面具需要移动,所以我认为如果我能让它做相反的事情,glscissor将是一个很好的选择。

我曾经使用过CCScissorNode.m from

实现(而不是你想要的相反)是:

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

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

因此,对于你来说,这可能就像你知道面积(你不想显示的矩形区域,即反向关闭)并且你知道屏幕面积,那么你可以从屏幕面积中扣除矩形。这会给你反向面积。我没有这样做。可能明天我可以发布一些代码。

你不需要任何现成的东西

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

@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会在控制台中显示您需要执行的操作。

这不需要剪切多个矩形(4)吗?这就是我现在正在尝试的。非常好,谢谢!请确保将代理中glView的depthFormat设置为GL_DEPTH24_stencil8oes,否则它将无法工作。