自从我进一步深入以来,我的问题得到了更新。
我试图用圆圈掩盖一个精灵,下面的代码似乎有效。
// 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
我想看看这个:
由于
答案 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];
}
}
显示如下
答案 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中。