Máscara sprite en círculo con cocos2d 3

Actualización de mi pregunta desde que llegué más lejos.

Estoy intentando enmascarar un sprite con un círculo, con el código debajo parece funcionar.

// 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]; 

También tuve que agregar esto a mi AppDelegate:

 [cocos2dSetup setObject:@GL_DEPTH24_STENCIL8_OES forKey:CCSetupDepthFormat]; 

Sin embargo, el "primer fotogtwig" hace que la image se desenmascara, por lo que parece un poco fea, ¿cómo podría solucionarlo? Hice un pequeño video que muestra el problema. http://cl.ly/U3QF

Voy por este look:

Imagen enmascarada

Gracias

No puedes establecer directamente sprite circular con image en CCSprite. para que pueda verlo y agregarlo a CCScene.

Primero, descarga la class AGMedallionView y agrega a tu proyecto.

Después de importar esa class en tu escena

 #import "AGMedallionView.h" 

en el método de escena 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 networkingColor]; view1.borderWidth = 5.0; [[[CCDirector shanetworkingDirector] view] addSubview:view1]; } } 

mostrar a continuación

introduzca la descripción de la imagen aquí

Gracias a tu trabajo inicial, pude poner un gradiente sobre un background de escenario como este:

 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]; 

El gradiente solo cubre el escenario donde el file de escenografía tiene alfa por encima de 0. El escenario tiene muchas áreas totalmente transparentes (el cielo …) Tenga en count que estoy usando un gradiente creado adhoc (CCNodeGradient), por lo que no necesita para usar exactamente un CCSprite que se recortará. En mi caso, recorta el gradiente, luego pongo el degradado encima de la image original (¡es la misma fuente de image que la plantilla!)

Por supuesto que también uso

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

en la aplicación delegada.