Search code examples
iphonexcodecocos2d-iphonecalayershapes

create shapes layer in cocos2D


well in my UIkit app I used this code:

boxPath = CGPathCreateMutable();

CGPathMoveToPoint(boxPath, nil, center.x , center.y - 35);
CGPathAddArcToPoint(boxPath, nil, center.x + 35, center.y - 35, center.x + 35, center.y + 35, 4.7);
CGPathAddArcToPoint(boxPath, nil, center.x + 35, center.y + 35, center.x - 35, center.y + 35, 4.7);
CGPathAddArcToPoint(boxPath, nil, center.x - 35, center.y + 35, center.x - 35, center.y, 4.7);
CGPathAddArcToPoint(boxPath, nil, center.x - 35, center.y - 35, center.x, center.y - 35, 4.7);

CGPathCloseSubpath(boxPath);

to create a shape, thus I had a layer with a precise shape that I had drawn. How can I do the same thing in cocos2D please? Thank you. Sorry for my english I'm french :/


Solution

  • What you need to do is draw that path to a CGContext and set the resulting image to a CCSprite:

    CGSize size = CGSizeMake(width, height); // width and height should be predefined
    CGPoint center = CGPointMake(size.width/2, size.height/2); // change this to change where the shape is positioned inside the image (normally will be this value)
    UIGraphicsBeginImageContextWithOptions(size, NO, 0);
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 1); // Replace 1 with your desired line width
    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0); // Change RGBA values if needed
    
    CGMutablePathRef boxPath = CGPathCreateMutable();
    
    CGPathMoveToPoint(boxPath, nil, center.x , center.y - 35);
    CGPathAddArcToPoint(boxPath, nil, center.x + 35, center.y - 35, center.x + 35, center.y + 35, 4.7);
    CGPathAddArcToPoint(boxPath, nil, center.x + 35, center.y + 35, center.x - 35, center.y + 35, 4.7);
    CGPathAddArcToPoint(boxPath, nil, center.x - 35, center.y + 35, center.x - 35, center.y, 4.7);
    CGPathAddArcToPoint(boxPath, nil, center.x - 35, center.y - 35, center.x, center.y - 35, 4.7);
    
    CGPathCloseSubpath(boxPath);
    
    CGContextAddPath(context, boxPath);
    CGContextStrokePath(context);
    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    CCTexture2D *texture = [[CCTexture2D alloc] initWithImage:image];
    CCSprite *sprite = [CCSprite spriteWithTexture:texture];
    [texture release];
    
    [self addChild:sprite];