Граница вокруг CCLayer

Я использую Cocos2d для перетаскивания спрайта и пытаюсь добавить границу, если выбран спрайт. Я могу отобразить свой белый фон, но моя граница оказывается особенно сложной. У меня есть этот код:

if(self.selectedSprite)
    self.selectedSprite = nil;

CCLayerColor *selectedLayer = [[CCLayerColor alloc] init];
//    CCSprite *backgroundSprite = [CCSprite spriteWithFile:@"white_1x1.gif" rect:CGRectMake(2,2,self.boundingBox.size.width-4,self.boundingBox.size.height-4)];
CCSprite *backgroundSprite = [CCSprite spriteWithFile:@"white_1x1.gif" rect:CGRectMake(0,0,self.boundingBox.size.width,self.boundingBox.size.height)];
[backgroundSprite setContentSize:CGSizeMake(self.contentSize.width-4, self.contentSize.height-4)];
backgroundSprite.anchorPoint = ccp(0,0);

CCRenderTexture* rt = [CCRenderTexture renderTextureWithWidth:backgroundSprite.texture.contentSize.width + 2  height:backgroundSprite.texture.contentSize.height+2];

[backgroundSprite setFlipY:YES];
[backgroundSprite setColor:ccc3(0,0,0)];
ccBlendFunc originalBlendFunc = [backgroundSprite blendFunc];
[backgroundSprite setBlendFunc:(ccBlendFunc) { GL_SRC_ALPHA, GL_ONE }];

CGPoint bottomLeft = ccp(backgroundSprite.texture.contentSize.width * backgroundSprite.anchorPoint.x + 1, backgroundSprite.texture.contentSize.height * backgroundSprite.anchorPoint.y + 1);
CGPoint position = ccpSub([backgroundSprite position], ccp(-backgroundSprite.contentSize.width / 2.0f, -backgroundSprite.contentSize.height / 2.0f));

[rt begin];

for (int i=0; i<360; i++) // you should optimize that for your needs
{
    [backgroundSprite setPosition:ccp(bottomLeft.x + sin(CC_DEGREES_TO_RADIANS(i))*1, bottomLeft.y + cos(CC_DEGREES_TO_RADIANS(i))*1)];
    [backgroundSprite visit];
}

[backgroundSprite setPosition:bottomLeft];
[backgroundSprite setBlendFunc:originalBlendFunc];
[backgroundSprite setColor:ccc3(255,255,255)];
[backgroundSprite visit];

[rt end];

[rt setPosition:position];

[selectedLayer addChild:rt];
[selectedLayer addChild:backgroundSprite];
self.selectedSprite = selectedLayer;

Я пробовал разные заклинания, но ничто не показывает границы. Мне просто нужна прямоугольная черная рамка, которая заполнена белым на обратной стороне всего остального на моем слое.

1 ответ

Решение

Вы можете создать свой собственный класс, который будет содержать ваш спрайт и рисовать границу над ним, если это необходимо. Чтобы нарисовать переопределение границы draw() метод вашего класса

-(void) draw
{
    if( m_needDrawRect == YES )
    {
        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);
    }

}

все, что вы рисуете в этом методе, будет нарисовано с помощью zOrder 0, поэтому, чтобы увидеть вашу границу, добавьте ваш спрайт с помощью zOrder -1.

Другие вопросы по тегам