2012-01-05 7 views
0

私は検索して検索しましたが、私にはうまくいかないものは見つかりませんでした。どのように私はcocos2d-iphoneのグラデーションを連続して描くことができますか?私はCCRibbonを試しましたが、ギャップがあり、drawメソッドで複数の整列した線を描画しようとしましたが、異なるアルファ値を使用しましたが、描画メソッドはアルファ設定に反応しません(常に100%ここで方法を描く)。どうすればいいですか?cocos2dで連続グラデーションラインを描く

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

私は、これは何が必要であるかどうかわからないあなたに
セーレン

答えて

1

ありがとう:GL_BLENDglBlendFuncの詳細については

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

あなたはOpenGL ES 1.1 Referenceを参照することができます。

0

質問からは、たとえば、左から右に向かって太い線を描き、その線の上から下に向かって勾配を描きたいと思っています。もしそうなら、これが私のやり方です。私はアルファを組み込んだ垂直グラデーションを持つ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]; 
} 
関連する問題