Cocos2d: однотонный прямоугольный спрайт? - PullRequest
9 голосов
/ 27 июля 2010

Я должен что-то упустить!

Я хочу создать сплошной прямоугольный CCSprite с цветом фона, инициализированным для определенного значения RGB.Я просмотрел все документы и ничего не могу найти.

Есть ли способ инициализировать фон CCSprite для определенного цвета?Я не хочу включать сплошной цвет PNG для каждого цвета, который мне понадобится.

Справка!

Ответы [ 5 ]

21 голосов
/ 30 января 2013

Сделай это с кодом!если вы не хотите связываться с файлами изображений, вот ваш метод:

- (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;
}

Затем вы можете установить свой цвет, размер и непрозрачность по мере необходимости.;)

9 голосов
/ 27 июля 2010

CCSprite имеет свойство color типа ccColor3B:

- (ccColor3B) color [read, assign]
RGB colors: conforms to CCRGBAProtocol protocol    

Definition at line 145 of file CCSprite.h.

Источник: CCSprite ссылка.

Вы можете легко создать ccColor3Bструктура с использованием ccc3():

ccc3(const GLubyte r, const GLubyte g, const GLubyte b)

Ссылка: ccColor3B ссылка.

5 голосов
/ 24 февраля 2012

Я нашел ответ на поваренная книга cocos2d .Следующий код взят из главы 1 этой книги, которую можно бесплатно просмотреть.

-(CCSprite *) rectangleSpriteWithSize:(CGSize)cgsize color:(ccColor3B) c
{
    CCSprite *sg = [CCSprite spriteWithFile:@"blank.png"];  
    [sg setTextureRect:CGRectMake( 0, 0, cgsize.width, cgsize.height)];
    sg.color = c;   
    return sg;  
}

Да, для этого по-прежнему требуется внешний файл изображения.Но с помощью этого крошечного «blank.png» размером 1x1 вы можете создавать спрайты прямоугольного цвета с произвольным размером и цветом.

3 голосов
/ 27 мая 2013

У меня никогда не было CCSprite для такой работы. Я просто использую CCLayerColor.

CCLayerColor* layercolorHalftransparentred = [CCLayerColor layerWithColor:ccc4(255, 0, 0, 128)];
0 голосов
/ 18 мая 2015

Для любого, кто наткнулся на этот вопрос (как я);код от Matjan, похоже, больше не работает на cocos 2d 3.x.Ниже приведена измененная версия, которая работает для меня:

+ (CCSprite*)blankSpriteWithSize:(CGSize)size
{
    GLubyte *buffer = malloc(sizeof(GLubyte)*4);
    for (int i=0;i<4;i++) {buffer[i]=255;}
    CCTexture *tex = [[CCTexture alloc] initWithData:buffer pixelFormat:CCTexturePixelFormat_RGBA8888 pixelsWide:1 pixelsHigh:1 contentSizeInPixels:size contentScale:1];
    CCSprite *sprite = [CCSprite spriteWithTexture:tex rect:CGRectMake(0,0,size.width,size.height)];
    free(buffer);
    return sprite;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...