Нарисуйте непрерывную градиентную линию в cocos2d - PullRequest
0 голосов
/ 05 января 2012

Я искал и искал и не нашел ничего, что работает для меня. Как я могу нарисовать непрерывную линию с градиентом в cocos2d-iphone? Я пробовал CCRibbon, но затем получаю пробелы, и я пытался нарисовать несколько выровненных линий в методе рисования, но с разными альфа-значениями, но мой метод рисования не реагирует на настройку альфа (это всегда 100% альфа, см. Мой метод рисования здесь под). Как я могу это сделать, пожалуйста?

- (void)draw {
    glEnable(GL_LINE_SMOOTH);
    glColor4ub(0,255,255,50);
    ccDrawLine( ccp(0 - 5, 0 - 5), ccp(200 - 5, 300 - 5) );
}

Спасибо
Сорен

Ответы [ 2 ]

1 голос
/ 21 апреля 2012

Я не уверен, что это то, что вам нужно:

- (void)draw {
    static GLubyte alpha = 0;
    static int step = 1;

    alpha += step;
    if (alpha == 255 || alpha == 0) {
        step = -step;
    }

    // You gonna need these two lines to use Alpha channel
    glEnable(GL_BLEND); // disabled by default
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glEnable(GL_LINE_SMOOTH);
    glColor4ub(0, 255, 255, alpha);
    ccDrawLine(ccp(0, 0), ccp(200, 300));
}

Для получения дополнительной информации о GL_BLEND и glBlendFunc вы можете обратиться к Справочник OpenGL ES 1.1 .

0 голосов
/ 16 июля 2012

Из вопроса, я думаю, вы хотите, например, толстую линию, идущую слева направо, и градиент, идущий от вершины этой линии к нижней. Если так, то я так и сделал. Я создал изображение размером 1 x 6 png с вертикальным градиентом и встроенной в него альфой. Затем, когда я хотел создать линию, я вызывал мой метод drawLine в своем слое.

- (void) drawLine: (CGPoint)origin withEnd:(CGPoint)end
{
    CCSprite *wall = [CCSprite spriteWithFile:@"WallGradient.png"];

    float distance = sqrt(powf(origin.x - end.x, 2) + powf(origin.y - end.y, 2));
    float rotation = (180/M_PI) * acosf((origin.x - end.x) / distance));

    [wall setScaleX:distance];
    [wall setRotation: rotation];
    [wall setPosition: origin];

    [self addChild:wall];
}
...