有没有办法可以在普通颜色精灵周围添加边框,而无需创建另一个精灵?
这里创建纯色矩形精灵的代码。感谢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);
}