Cocos2d:带边框的纯色矩形精灵

时间:2013-03-06 14:09:55

标签: objective-c opengl cocos2d-iphone sprite

有没有办法可以在普通颜色精灵周围添加边框,而无需创建另一个精灵?

这里创建纯色矩形精灵的代码。感谢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];内遗失-(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);
}

0 个答案:

没有答案