使用cocos2d 3圈出精灵

时间:2014-02-21 16:58:33

标签: ios cocos2d-iphone sprite mask

自从我进一步深入以来,我的问题得到了更新。

我试图用圆圈掩盖一个精灵,下面的代码似乎有效。

    // Create the clipping node
    self.clippingNode = [CCClippingNode clippingNodeWithStencil:[CCSprite spriteWithImageNamed:@"Home Scene/top-circle-mask.png"]];

    self.clippingNode.alphaThreshold = 0;

    // Add the image
    [self.clippingNode addChild:self.maskedImage];

    // And add the clipping node to the tree
    [self addChild:self.clippingNode];

我还必须将它添加到我的AppDelegate:

[cocos2dSetup setObject:@GL_DEPTH24_STENCIL8_OES forKey:CCSetupDepthFormat];

然而,“第一帧”渲染图像未被屏蔽,所以看起来有点难看,我怎么能解决这个问题?我制作了一个显示问题的小视频。 http://cl.ly/U3QF

我想看看这个:

Masked image

由于

2 个答案:

答案 0 :(得分:1)

您无法在CCSprite中直接使用图像设置圆形精灵。所以你将视图添加到CCScene中。

首先,您下载AGMedallionView课程并添加到您的项目中。

在场景中导入该类

#import "AGMedallionView.h"
在场景的init方法中

-(id) init
{
    if( (self=[super init]) )
    {
        AGMedallionView *view1 = [[AGMedallionView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
        [view1 setImage:[UIImage imageNamed:@"Icon-Small@2x.png"]];
        view1.borderColor = [UIColor redColor];
        view1.borderWidth = 5.0;
        [[[CCDirector sharedDirector] view] addSubview:view1];
    }
}

显示如下

enter image description here

答案 1 :(得分:0)

感谢您的初步工作,我能够在这样的风景背景上放置渐变:

CCSprite* spriteStencil = [CCSprite spriteWithImageNamed:stringSceneryfilename];
spriteStencil.anchorPoint = ccp(0, 0);
CCClippingNode* crop = [CCClippingNode clippingNodeWithStencil:spriteStencil];
crop.alphaThreshold = 0;
CCNodeGradient* nodegradient = [CCNodeGradient nodeWithColor:[CCColor colorWithRed:0 green:0 blue:0 alpha:0] fadingTo:[CCColor colorWithRed:0 green:0 blue:0 alpha:1] alongVector:ccp(0, 1)];
nodegradient.contentSizeInPoints = CGSizeMake(spriteScenery1.contentSizeInPoints.width, WINSIZE.height);
nodegradient.anchorPoint = ccp(0, 0);
[crop addChild:nodegradient];
[spriteScenery1 addChild:crop];

渐变仅覆盖风景文件的alpha值大于0的风景。风景有很多完全透明的区域(天空......)请注意,我使用了一个adhoc创建的渐变(CCNodeGradient),所以你不要不需要使用将被裁剪的CCSprite。在我的情况下它裁剪渐变,然后我把渐变放在原始图像的顶部(这是与模板相同的图像源!)

当然我也用

[cocos2dSetup setObject:@GL_DEPTH24_STENCIL8_OES forKey:CCSetupDepthFormat]; // for stencils to work? aka CCClippingNode

在app delegate中。