別のスプライトを作成することなく、無地のスプライトの周りに境界線を追加する方法はありますか?
これは、無地の長方形のスプライトを作成するコードです。SO で共有してくれた Mat Cegiela に感謝します ( 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;
}
画像ファイルを使用しないため、これはうまく機能します。
境界線を追加するには、上記の方法を使用して 2 つの無地のスプライトを作成し、1 つを少し小さくして、小さい方を子として親スプライトに追加することができますが、よりエレガントに行う方法はありますか?
試してみました(https://stackoverflow.com/a/10903183/1097106)-共有してくれたモリオンに感謝します:
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);
}