ios - Máscara de sprite en círculo con cocos2d 3
cocos2d-iphone mask (2)
Actualización de mi pregunta desde que llegué más lejos.
Estoy tratando de enmascarar un sprite con un círculo, con el siguiente código 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 fotograma" muestra la imagen sin máscara, por lo que se ve un poco feo, ¿cómo podría solucionarlo? He hecho un pequeño video que muestra el problema. http://cl.ly/U3QF
Voy por este look:
Gracias
No se puede establecer directamente el sprite del círculo con la imagen en CCSprite. para que vea y lo agregue a CCScene.
antes que nada, descargue la clase AGMedallionView y agregue a su proyecto.
Después de importar esa clase en tu escena
#import "AGMedallionView.h"
en el método init de la escena
-(id) init
{
if( (self=[super init]) )
{
AGMedallionView *view1 = [[AGMedallionView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
[view1 setImage:[UIImage imageNamed:@"[email protected]"]];
view1.borderColor = [UIColor redColor];
view1.borderWidth = 5.0;
[[[CCDirector sharedDirector] view] addSubview:view1];
}
}
mostrar como abajo
Gracias a su trabajo inicial, pude poner un degradado sobre un fondo 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 degradado solo cubre el escenario donde el archivo de escenario tiene alfa por encima de 0. El escenario tiene muchas áreas totalmente transparentes (el cielo ...) Tenga en cuenta que estoy usando un gradiente creado adhoc (CCNodeGradient), por lo que no necesita para usar exactamente un CCSprite que se recortará En mi caso, cose el gradiente, luego pongo el degradado encima de la imagen original (¡esta es la misma fuente de imagen que la plantilla!)
Por supuesto que también uso
[cocos2dSetup setObject:@GL_DEPTH24_STENCIL8_OES forKey:CCSetupDepthFormat]; // for stencils to work? aka CCClippingNode
en delegado de aplicaciones.