2012-01-05 118 views
0

我已经搜索和搜索,没有找到任何适用于我的东西。如何在cocos2d-iphone中绘制一个渐变线?我尝试过CCRibbon,但后来我得到了空白,我试图在绘制方法中绘制多个对齐的线条,但使用不同的alpha值,但是我的绘制方法不会对设置alpha做出反应(它总是100%alpha,请参阅我的绘制方法在这里)。我该怎么做?在cocos2d中连续绘制渐变线

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

谢谢
瑟伦

回答

1

我不知道这是否是你所需要的:

- (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_BLENDglBlendFunc你可以参考OpenGL ES 1.1 Reference

0

从我想你想要的问题,例如,从左到右运行的粗线和从该线的顶部到底部的渐变。如果是这样,那么我就是这么做的。我创建了一个1 x 6 png图像,该图像具有垂直渐变,并且内置了一个alpha。然后,当我想创建一条线时,我会在我的图层中调用我的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]; 
}