1

有没有一种方法可以在纯色精灵周围添加边框而无需创建另一个精灵?

这里是创建纯色矩形精灵的代码。感谢 Mat Cegiela 在 SO ( https://stackoverflow.com/a/14609459/1097106 ) 上分享它。:

-(CCSprite*)blankSpriteWithSize:(CGSize)size
{
    CCSprite *sprite = [CCSprite node];
    GLubyte *buffer = malloc(sizeof(GLubyte)*4);
    for (int i=0;i<4;i++) {buffer[i]=255;}
    CCTexture2D *tex = [[CCTexture2D alloc] initWithData:buffer pixelFormat:kCCTexture2DPixelFormat_RGB5A1 pixelsWide:1 pixelsHigh:1 contentSize:size];
    [sprite setTexture:tex];
    [sprite setTextureRect:CGRectMake(0, 0, size.width, size.height)];
    free(buffer);
    return sprite;
}

这很好用,因为它不使用任何图像文件。

要添加边框,可以使用上述方法创建两个纯色精灵,一个稍微小一点,并将较小的一个作为子精灵添加到父精灵,但是有没有一种方法可以更优雅地做到这一点?

我试过了(https://stackoverflow.com/a/10903183/1097106)——感谢 Morion 的分享:

CGSize selfSize = [self contentSize];
float selfHeight = selfSize.height;
float selfWidth = selfSize.width;
CGPoint vertices[4] = {ccp(0.f, 0.f), ccp(0.f, selfHeight), ccp(selfWidth, selfHeight), ccp(selfWidth, 0.f)};
ccDrawPoly(vertices, 4, YES);

在精灵中-(void)draw没有任何积极的结果。将此代码添加到-(void)draw.

编辑: 原来问题是缺少[super draw];inside -(void)draw。添加它会使其工作。

这里的实现-(void)draw将允许在纯色矩形精灵周围设置边框(它还定义了自定义颜色):

-(void)draw
{
    [super draw];

    CGSize selfSize = [self contentSize];
    float selfHeight = selfSize.height;
    float selfWidth = selfSize.width;
    CGPoint vertices[4] = {ccp(0.f, 0.f), ccp(0.f, selfHeight), ccp(selfWidth, selfHeight), ccp(selfWidth, 0.f)};
    ccDrawColor4B(120, 120, 120, 255);
    ccDrawPoly(vertices, 4, YES);
}
4

0 回答 0